From a712d865cd14b38e9e4f30b1359f9eee04a8a92d Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Fri, 20 Jan 2023 21:16:45 +0900 Subject: [PATCH 01/20] [METRICS] Re-order init/final (#1985, #2001) --- src/amf/init.c | 13 +++++++------ src/amf/metrics.c | 12 ++++-------- src/amf/metrics.h | 4 ++-- src/mme/metrics.c | 11 ++++------- src/mme/metrics.h | 4 ++-- src/mme/mme-init.c | 12 +++++++----- src/pcf/init.c | 13 +++++++------ src/pcf/metrics.c | 12 ++++-------- src/pcf/metrics.h | 4 ++-- src/smf/init.c | 12 +++++++----- src/smf/metrics.c | 11 ++++------- src/smf/metrics.h | 4 ++-- src/upf/init.c | 12 +++++++----- src/upf/metrics.c | 12 ++++-------- src/upf/metrics.h | 4 ++-- 15 files changed, 65 insertions(+), 75 deletions(-) diff --git a/src/amf/init.c b/src/amf/init.c index 3d6ad59e8..f3026a637 100644 --- a/src/amf/init.c +++ b/src/amf/init.c @@ -29,9 +29,9 @@ int amf_initialize() { int rv; - ogs_metrics_context_init(); - ogs_sbi_context_init(); + amf_metrics_init(); + ogs_sbi_context_init(); amf_context_init(); rv = ogs_sbi_context_parse_config("amf", "nrf", "scp"); @@ -53,8 +53,7 @@ int amf_initialize() ogs_app()->logger.domain, ogs_app()->logger.level); if (rv != OGS_OK) return rv; - rv = amf_metrics_open(); - if (rv != 0) return OGS_ERROR; + ogs_metrics_context_open(ogs_metrics_self()); rv = amf_sbi_open(); if (rv != OGS_OK) return rv; @@ -102,11 +101,13 @@ void amf_terminate(void) ngap_close(); amf_sbi_close(); - amf_metrics_close(); + + ogs_metrics_context_close(ogs_metrics_self()); amf_context_final(); ogs_sbi_context_final(); - ogs_metrics_context_final(); + + amf_metrics_final(); } static void amf_main(void *data) diff --git a/src/amf/metrics.c b/src/amf/metrics.c index a2518283c..ff62a9aa2 100644 --- a/src/amf/metrics.c +++ b/src/amf/metrics.c @@ -247,10 +247,10 @@ int amf_metrics_free_inst_by_cause(ogs_metrics_inst_t **inst) return amf_metrics_free_inst(inst, _AMF_METR_BY_CAUSE_MAX); } -int amf_metrics_open(void) +void amf_metrics_init(void) { ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_open(ctx); + ogs_metrics_context_init(); amf_metrics_init_spec(ctx, amf_metrics_spec_global, amf_metrics_spec_def_global, _AMF_METR_GLOB_MAX); @@ -264,14 +264,11 @@ int amf_metrics_open(void) amf_metrics_init_by_slice(); amf_metrics_init_by_cause(); - - return 0; } -int amf_metrics_close(void) +void amf_metrics_final(void) { ogs_hash_index_t *hi; - ogs_metrics_context_t *ctx = ogs_metrics_self(); if (metrics_hash_by_slice) { for (hi = ogs_hash_first(metrics_hash_by_slice); hi; hi = ogs_hash_next(hi)) { @@ -304,6 +301,5 @@ int amf_metrics_close(void) ogs_hash_destroy(metrics_hash_by_cause); } - ogs_metrics_context_close(ctx); - return OGS_OK; + ogs_metrics_context_final(); } diff --git a/src/amf/metrics.h b/src/amf/metrics.h index 8dad1b4fc..190012355 100644 --- a/src/amf/metrics.h +++ b/src/amf/metrics.h @@ -46,8 +46,8 @@ typedef enum amf_metric_type_by_cause_s { void amf_metrics_inst_by_cause_add( uint8_t cause, amf_metric_type_by_cause_t t, int val); -int amf_metrics_open(void); -int amf_metrics_close(void); +void amf_metrics_init(void); +void amf_metrics_final(void); #ifdef __cplusplus } diff --git a/src/mme/metrics.c b/src/mme/metrics.c index e6a3f5f90..feadf05b6 100644 --- a/src/mme/metrics.c +++ b/src/mme/metrics.c @@ -75,21 +75,18 @@ int mme_metrics_free_inst_global(void) return mme_metrics_free_inst(mme_metrics_inst_global, _MME_METR_GLOB_MAX); } -int mme_metrics_open(void) +void mme_metrics_init(void) { ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_open(ctx); + ogs_metrics_context_init(); mme_metrics_init_spec(ctx, mme_metrics_spec_global, mme_metrics_spec_def_global, _MME_METR_GLOB_MAX); mme_metrics_init_inst_global(); - return 0; } -int mme_metrics_close(void) +void mme_metrics_final(void) { - ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_close(ctx); - return OGS_OK; + ogs_metrics_context_final(); } diff --git a/src/mme/metrics.h b/src/mme/metrics.h index 580315c45..27d362189 100644 --- a/src/mme/metrics.h +++ b/src/mme/metrics.h @@ -28,8 +28,8 @@ static inline void mme_metrics_inst_global_inc(mme_metric_type_global_t t) static inline void mme_metrics_inst_global_dec(mme_metric_type_global_t t) { ogs_metrics_inst_dec(mme_metrics_inst_global[t]); } -int mme_metrics_open(void); -int mme_metrics_close(void); +void mme_metrics_init(void); +void mme_metrics_final(void); #ifdef __cplusplus } diff --git a/src/mme/mme-init.c b/src/mme/mme-init.c index a249fedeb..6ab744d1f 100644 --- a/src/mme/mme-init.c +++ b/src/mme/mme-init.c @@ -39,7 +39,9 @@ static int initialized = 0; int mme_initialize() { int rv; - ogs_metrics_context_init(); + + mme_metrics_init(); + ogs_gtp_context_init(OGS_MAX_NUM_OF_GTPU_RESOURCE); mme_context_init(); @@ -62,8 +64,7 @@ int mme_initialize() rv = mme_m_tmsi_pool_generate(); if (rv != OGS_OK) return rv; - rv = mme_metrics_open(); - if (rv != 0) return OGS_ERROR; + ogs_metrics_context_open(ogs_metrics_self()); rv = mme_fd_init(); if (rv != OGS_OK) return OGS_ERROR; @@ -96,7 +97,8 @@ void mme_terminate(void) mme_gtp_close(); sgsap_close(); s1ap_close(); - mme_metrics_close(); + + ogs_metrics_context_close(ogs_metrics_self()); mme_fd_final(); @@ -106,7 +108,7 @@ void mme_terminate(void) ogs_gtp_xact_final(); - ogs_metrics_context_final(); + mme_metrics_final(); } static void mme_main(void *data) diff --git a/src/pcf/init.c b/src/pcf/init.c index 09c46912c..2227b1004 100644 --- a/src/pcf/init.c +++ b/src/pcf/init.c @@ -28,7 +28,8 @@ int pcf_initialize() { int rv; - ogs_metrics_context_init(); + pcf_metrics_init(); + ogs_sbi_context_init(); pcf_context_init(); @@ -45,8 +46,7 @@ int pcf_initialize() ogs_app()->logger.domain, ogs_app()->logger.level); if (rv != OGS_OK) return rv; - rv = pcf_metrics_open(); - if (rv != 0) return OGS_ERROR; + ogs_metrics_context_open(ogs_metrics_self()); rv = ogs_dbi_init(ogs_app()->db_uri); if (rv != OGS_OK) return rv; @@ -93,14 +93,15 @@ void pcf_terminate(void) ogs_timer_delete(t_termination_holding); pcf_sbi_close(); - pcf_metrics_close(); + + ogs_metrics_context_close(ogs_metrics_self()); ogs_dbi_final(); pcf_context_final(); - ogs_sbi_context_final(); - ogs_metrics_context_final(); + + pcf_metrics_final(); } static void pcf_main(void *data) diff --git a/src/pcf/metrics.c b/src/pcf/metrics.c index c65c1f056..a7d375751 100644 --- a/src/pcf/metrics.c +++ b/src/pcf/metrics.c @@ -258,10 +258,10 @@ int pcf_metrics_free_inst_by_slice(ogs_metrics_inst_t **inst) return pcf_metrics_free_inst(inst, _PCF_METR_BY_SLICE_MAX); } -int pcf_metrics_open(void) +void pcf_metrics_init(void) { ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_open(ctx); + ogs_metrics_context_init(); pcf_metrics_init_spec(ctx, pcf_metrics_spec_global, pcf_metrics_spec_def_global, _PCF_METR_GLOB_MAX); @@ -273,14 +273,11 @@ int pcf_metrics_open(void) pcf_metrics_init_inst_global(); pcf_metrics_init_by_plmn(); pcf_metrics_init_by_slice(); - - return 0; } -int pcf_metrics_close(void) +void pcf_metrics_final(void) { ogs_hash_index_t *hi; - ogs_metrics_context_t *ctx = ogs_metrics_self(); if (metrics_hash_by_slice) { for (hi = ogs_hash_first(metrics_hash_by_slice); hi; hi = ogs_hash_next(hi)) { @@ -313,6 +310,5 @@ int pcf_metrics_close(void) ogs_hash_destroy(metrics_hash_by_plmn); } - ogs_metrics_context_close(ctx); - return OGS_OK; + ogs_metrics_context_final(); } diff --git a/src/pcf/metrics.h b/src/pcf/metrics.h index ebe86ddb9..2cf234436 100644 --- a/src/pcf/metrics.h +++ b/src/pcf/metrics.h @@ -46,8 +46,8 @@ void pcf_metrics_inst_by_slice_add( ogs_plmn_id_t *plmn, ogs_s_nssai_t *snssai, pcf_metric_type_by_slice_t t, int val); -int pcf_metrics_open(void); -int pcf_metrics_close(void); +void pcf_metrics_init(void); +void pcf_metrics_final(void); #ifdef __cplusplus } diff --git a/src/smf/init.c b/src/smf/init.c index f7024609c..310a88f1a 100644 --- a/src/smf/init.c +++ b/src/smf/init.c @@ -33,7 +33,8 @@ int smf_initialize() { int rv; - ogs_metrics_context_init(); + smf_metrics_init(); + ogs_gtp_context_init(ogs_app()->pool.nf * OGS_MAX_NUM_OF_GTPU_RESOURCE); ogs_pfcp_context_init(); ogs_sbi_context_init(); @@ -68,8 +69,7 @@ int smf_initialize() rv = ogs_pfcp_ue_pool_generate(); if (rv != OGS_OK) return rv; - rv = smf_metrics_open(); - if (rv != 0) return OGS_ERROR; + ogs_metrics_context_open(ogs_metrics_self()); rv = smf_fd_init(); if (rv != 0) return OGS_ERROR; @@ -124,7 +124,8 @@ void smf_terminate(void) smf_gtp_close(); smf_pfcp_close(); smf_sbi_close(); - smf_metrics_close(); + + ogs_metrics_context_close(ogs_metrics_self()); smf_fd_final(); @@ -133,10 +134,11 @@ void smf_terminate(void) ogs_pfcp_context_final(); ogs_sbi_context_final(); ogs_gtp_context_final(); - ogs_metrics_context_final(); ogs_pfcp_xact_final(); ogs_gtp_xact_final(); + + smf_metrics_final(); } static void smf_main(void *data) diff --git a/src/smf/metrics.c b/src/smf/metrics.c index 0c23b0c9d..45a684037 100644 --- a/src/smf/metrics.c +++ b/src/smf/metrics.c @@ -462,10 +462,10 @@ int smf_metrics_free_inst_by_cause(ogs_metrics_inst_t **inst) return smf_metrics_free_inst(inst, _SMF_METR_BY_CAUSE_MAX); } -int smf_metrics_open(void) +void smf_metrics_init(void) { ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_open(ctx); + ogs_metrics_context_init(); smf_metrics_init_spec(ctx, smf_metrics_spec_global, smf_metrics_spec_def_global, _SMF_METR_GLOB_MAX); @@ -484,13 +484,11 @@ int smf_metrics_open(void) smf_metrics_init_by_slice(); smf_metrics_init_by_5qi(); smf_metrics_init_by_cause(); - return 0; } -int smf_metrics_close(void) +void smf_metrics_final(void) { ogs_hash_index_t *hi; - ogs_metrics_context_t *ctx = ogs_metrics_self(); if (metrics_hash_by_slice) { for (hi = ogs_hash_first(metrics_hash_by_slice); hi; hi = ogs_hash_next(hi)) { @@ -538,6 +536,5 @@ int smf_metrics_close(void) ogs_hash_destroy(metrics_hash_by_cause); } - ogs_metrics_context_close(ctx); - return OGS_OK; + ogs_metrics_context_final(); } diff --git a/src/smf/metrics.h b/src/smf/metrics.h index ad7c03746..80b7d2df5 100644 --- a/src/smf/metrics.h +++ b/src/smf/metrics.h @@ -93,8 +93,8 @@ typedef enum smf_metric_type_by_cause_s { void smf_metrics_inst_by_cause_add( uint8_t cause, smf_metric_type_by_cause_t t, int val); -int smf_metrics_open(void); -int smf_metrics_close(void); +void smf_metrics_init(void); +void smf_metrics_final(void); #ifdef __cplusplus } diff --git a/src/upf/init.c b/src/upf/init.c index d5c4622bc..9bebd5e3f 100644 --- a/src/upf/init.c +++ b/src/upf/init.c @@ -31,7 +31,8 @@ int upf_initialize() { int rv; - ogs_metrics_context_init(); + upf_metrics_init(); + ogs_gtp_context_init(OGS_MAX_NUM_OF_GTPU_RESOURCE); ogs_pfcp_context_init(); @@ -61,8 +62,7 @@ int upf_initialize() rv = ogs_pfcp_ue_pool_generate(); if (rv != OGS_OK) return rv; - rv = upf_metrics_open(); - if (rv != 0) return OGS_ERROR; + ogs_metrics_context_open(ogs_metrics_self()); rv = upf_pfcp_open(); if (rv != OGS_OK) return rv; @@ -88,18 +88,20 @@ void upf_terminate(void) upf_pfcp_close(); upf_gtp_close(); - upf_metrics_close(); + + ogs_metrics_context_close(ogs_metrics_self()); upf_context_final(); ogs_pfcp_context_final(); ogs_gtp_context_final(); - ogs_metrics_context_final(); ogs_pfcp_xact_final(); upf_gtp_final(); upf_event_final(); + + upf_metrics_final(); } static void upf_main(void *data) diff --git a/src/upf/metrics.c b/src/upf/metrics.c index f87332a92..f47d7d754 100644 --- a/src/upf/metrics.c +++ b/src/upf/metrics.c @@ -315,10 +315,10 @@ int upf_metrics_free_inst_by_dnn(ogs_metrics_inst_t **inst) return upf_metrics_free_inst(inst, _UPF_METR_BY_DNN_MAX); } -int upf_metrics_open(void) +void upf_metrics_init(void) { ogs_metrics_context_t *ctx = ogs_metrics_self(); - ogs_metrics_context_open(ctx); + ogs_metrics_context_init(); upf_metrics_init_spec(ctx, upf_metrics_spec_global, upf_metrics_spec_def_global, _UPF_METR_GLOB_MAX); @@ -333,14 +333,11 @@ int upf_metrics_open(void) upf_metrics_init_by_qfi(); upf_metrics_init_by_cause(); upf_metrics_init_by_dnn(); - - return 0; } -int upf_metrics_close(void) +void upf_metrics_final(void) { ogs_hash_index_t *hi; - ogs_metrics_context_t *ctx = ogs_metrics_self(); if (metrics_hash_by_qfi) { for (hi = ogs_hash_first(metrics_hash_by_qfi); hi; hi = ogs_hash_next(hi)) { @@ -388,6 +385,5 @@ int upf_metrics_close(void) ogs_hash_destroy(metrics_hash_by_dnn); } - ogs_metrics_context_close(ctx); - return OGS_OK; + ogs_metrics_context_final(); } diff --git a/src/upf/metrics.h b/src/upf/metrics.h index 13d99179b..d4e930218 100644 --- a/src/upf/metrics.h +++ b/src/upf/metrics.h @@ -59,8 +59,8 @@ typedef enum upf_metric_type_by_dnn_s { void upf_metrics_inst_by_dnn_add( char *dnn, upf_metric_type_by_dnn_t t, int val); -int upf_metrics_open(void); -int upf_metrics_close(void); +void upf_metrics_init(void); +void upf_metrics_final(void); #ifdef __cplusplus } From df4c83372d64cd046e725af44fc95484162f73b2 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sat, 21 Jan 2023 09:02:44 +0900 Subject: [PATCH 02/20] [AMF] Fixed MEMORY LEAK (#1925) --- src/amf/nas-path.c | 1 + tests/registration/multi-ue-test.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/amf/nas-path.c b/src/amf/nas-path.c index faf7c5faf..3c492feeb 100644 --- a/src/amf/nas-path.c +++ b/src/amf/nas-path.c @@ -659,6 +659,7 @@ int nas_send_pdu_session_release_command(amf_sess_t *sess, rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); ogs_expect(rv == OGS_OK); } else if (gmmbuf) { + ogs_pkbuf_free(n2smbuf); ngapbuf = ngap_build_downlink_nas_transport( ran_ue, gmmbuf, false, false); if (!ngapbuf) { diff --git a/tests/registration/multi-ue-test.c b/tests/registration/multi-ue-test.c index 5a058b7ba..93968ef99 100644 --- a/tests/registration/multi-ue-test.c +++ b/tests/registration/multi-ue-test.c @@ -58,6 +58,7 @@ static void test1_func(abts_case *tc, void *data) /* Receive NG-Setup Response */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); + ogs_pkbuf_free(recvbuf); for (i = 0; i < NUM_OF_TEST_UE; i++) { const char *scheme_output[] = { From ff261681c01c85d89e6d337d3d5ada0c5d16a5f7 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sat, 21 Jan 2023 12:58:43 +0900 Subject: [PATCH 03/20] [PROTO] Increase SDU buffer 8k->16k (#2008) --- lib/app/ogs-context.c | 4 ++-- lib/core/ogs-pkbuf.c | 40 ++++++++++++++++++++++++++-------------- lib/core/ogs-pkbuf.h | 2 +- lib/core/ogs-strings.h | 2 +- lib/pfcp/rule-match.c | 8 ++++---- lib/proto/types.h | 2 +- lib/sbi/client.c | 2 ++ src/scp/sbi-path.c | 2 +- src/upf/gtp-path.c | 4 ++-- 9 files changed, 40 insertions(+), 26 deletions(-) diff --git a/lib/app/ogs-context.c b/lib/app/ogs-context.c index f315df558..98a1a98d8 100644 --- a/lib/app/ogs-context.c +++ b/lib/app/ogs-context.c @@ -425,10 +425,10 @@ int ogs_app_context_parse_config(void) const char *v = ogs_yaml_iter_value(&pool_iter); if (v) self.pool.defconfig.cluster_2048_pool = atoi(v); - } else if (!strcmp(pool_key, "8192")) { + } else if (!strcmp(pool_key, "16384")) { const char *v = ogs_yaml_iter_value(&pool_iter); if (v) - self.pool.defconfig.cluster_8192_pool = atoi(v); + self.pool.defconfig.cluster_16384_pool = atoi(v); } else if (!strcmp(pool_key, "big")) { const char *v = ogs_yaml_iter_value(&pool_iter); if (v) diff --git a/lib/core/ogs-pkbuf.c b/lib/core/ogs-pkbuf.c index 4f2ef4054..b8d4b716c 100644 --- a/lib/core/ogs-pkbuf.c +++ b/lib/core/ogs-pkbuf.c @@ -28,15 +28,27 @@ #define OGS_CLUSTER_512_SIZE 512 #define OGS_CLUSTER_1024_SIZE 1024 #define OGS_CLUSTER_2048_SIZE 2048 -#define OGS_CLUSTER_8192_SIZE 8192 -#define OGS_CLUSTER_BIG_SIZE 1024*1024 +#define OGS_CLUSTER_16384_SIZE 16384 + +/* + * + * In lib/core/ogs-kqueue.c:69 + * context->change_list = ogs_calloc( + * pollset->capacity, sizeof(struct kevent)); + * 1. pollset->capacity : 1024*16 + * 2. sizeof(struct kevent) : 64 + * 3. sizeof(ogs_pkbuf_t *) is headroom in ogs_calloc() + * + * So, we use BIG_SIZE : 1024*(16*64=1024)*64+8 + */ +#define OGS_CLUSTER_BIG_SIZE (1024*1024+sizeof(ogs_pkbuf_t *)) typedef uint8_t ogs_cluster_128_t[OGS_CLUSTER_128_SIZE]; typedef uint8_t ogs_cluster_256_t[OGS_CLUSTER_256_SIZE]; typedef uint8_t ogs_cluster_512_t[OGS_CLUSTER_512_SIZE]; typedef uint8_t ogs_cluster_1024_t[OGS_CLUSTER_1024_SIZE]; typedef uint8_t ogs_cluster_2048_t[OGS_CLUSTER_2048_SIZE]; -typedef uint8_t ogs_cluster_8192_t[OGS_CLUSTER_8192_SIZE]; +typedef uint8_t ogs_cluster_16384_t[OGS_CLUSTER_16384_SIZE]; typedef uint8_t ogs_cluster_big_t[OGS_CLUSTER_BIG_SIZE]; OGS_STATIC_ASSERT(sizeof(ogs_cluster_128_t) % sizeof(void *) == 0); @@ -44,7 +56,7 @@ OGS_STATIC_ASSERT(sizeof(ogs_cluster_256_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_512_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_1024_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_2048_t) % sizeof(void *) == 0); -OGS_STATIC_ASSERT(sizeof(ogs_cluster_8192_t) % sizeof(void *) == 0); +OGS_STATIC_ASSERT(sizeof(ogs_cluster_16384_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_big_t) % sizeof(void *) == 0); typedef struct ogs_pkbuf_pool_s { @@ -56,7 +68,7 @@ typedef struct ogs_pkbuf_pool_s { OGS_POOL(cluster_512, ogs_cluster_512_t); OGS_POOL(cluster_1024, ogs_cluster_1024_t); OGS_POOL(cluster_2048, ogs_cluster_2048_t); - OGS_POOL(cluster_8192, ogs_cluster_8192_t); + OGS_POOL(cluster_16384, ogs_cluster_16384_t); OGS_POOL(cluster_big, ogs_cluster_big_t); ogs_thread_mutex_t mutex; @@ -104,7 +116,7 @@ void ogs_pkbuf_default_init(ogs_pkbuf_config_t *config) config->cluster_512_pool = 4096; config->cluster_1024_pool = 2048; config->cluster_2048_pool = 1024; - config->cluster_8192_pool = 512; + config->cluster_16384_pool = 512; config->cluster_big_pool = 8; #endif } @@ -139,7 +151,7 @@ ogs_pkbuf_pool_t *ogs_pkbuf_pool_create(ogs_pkbuf_config_t *config) tmp = config->cluster_128_pool + config->cluster_256_pool + config->cluster_512_pool + config->cluster_1024_pool + - config->cluster_2048_pool + config->cluster_8192_pool + + config->cluster_2048_pool + config->cluster_16384_pool + config->cluster_big_pool; ogs_pool_init(&pool->pkbuf, tmp); @@ -150,7 +162,7 @@ ogs_pkbuf_pool_t *ogs_pkbuf_pool_create(ogs_pkbuf_config_t *config) ogs_pool_init(&pool->cluster_512, config->cluster_512_pool); ogs_pool_init(&pool->cluster_1024, config->cluster_1024_pool); ogs_pool_init(&pool->cluster_2048, config->cluster_2048_pool); - ogs_pool_init(&pool->cluster_8192, config->cluster_8192_pool); + ogs_pool_init(&pool->cluster_16384, config->cluster_16384_pool); ogs_pool_init(&pool->cluster_big, config->cluster_big_pool); #endif @@ -188,7 +200,7 @@ void ogs_pkbuf_pool_destroy(ogs_pkbuf_pool_t *pool) ogs_pool_final(&pool->cluster_512); ogs_pool_final(&pool->cluster_1024); ogs_pool_final(&pool->cluster_2048); - ogs_pool_final(&pool->cluster_8192); + ogs_pool_final(&pool->cluster_16384); ogs_pool_final(&pool->cluster_big); ogs_thread_mutex_destroy(&pool->mutex); @@ -378,10 +390,10 @@ static ogs_cluster_t *cluster_alloc( ogs_pool_alloc(&pool->cluster_2048, (ogs_cluster_2048_t**)&buffer); ogs_expect_or_return_val(buffer, NULL); cluster->size = OGS_CLUSTER_2048_SIZE; - } else if (size <= OGS_CLUSTER_8192_SIZE) { - ogs_pool_alloc(&pool->cluster_8192, (ogs_cluster_8192_t**)&buffer); + } else if (size <= OGS_CLUSTER_16384_SIZE) { + ogs_pool_alloc(&pool->cluster_16384, (ogs_cluster_16384_t**)&buffer); ogs_expect_or_return_val(buffer, NULL); - cluster->size = OGS_CLUSTER_8192_SIZE; + cluster->size = OGS_CLUSTER_16384_SIZE; } else if (size <= OGS_CLUSTER_BIG_SIZE) { ogs_pool_alloc(&pool->cluster_big, (ogs_cluster_big_t**)&buffer); ogs_expect_or_return_val(buffer, NULL); @@ -419,9 +431,9 @@ static void cluster_free(ogs_pkbuf_pool_t *pool, ogs_cluster_t *cluster) ogs_pool_free( &pool->cluster_2048, (ogs_cluster_2048_t*)cluster->buffer); break; - case OGS_CLUSTER_8192_SIZE: + case OGS_CLUSTER_16384_SIZE: ogs_pool_free( - &pool->cluster_8192, (ogs_cluster_8192_t*)cluster->buffer); + &pool->cluster_16384, (ogs_cluster_16384_t*)cluster->buffer); break; case OGS_CLUSTER_BIG_SIZE: ogs_pool_free(&pool->cluster_big, (ogs_cluster_big_t*)cluster->buffer); diff --git a/lib/core/ogs-pkbuf.h b/lib/core/ogs-pkbuf.h index 2952b0681..21916a19e 100644 --- a/lib/core/ogs-pkbuf.h +++ b/lib/core/ogs-pkbuf.h @@ -68,7 +68,7 @@ typedef struct ogs_pkbuf_config_s { int cluster_512_pool; int cluster_1024_pool; int cluster_2048_pool; - int cluster_8192_pool; + int cluster_16384_pool; int cluster_big_pool; } ogs_pkbuf_config_t; diff --git a/lib/core/ogs-strings.h b/lib/core/ogs-strings.h index 3b27544e1..3dc6d27c4 100644 --- a/lib/core/ogs-strings.h +++ b/lib/core/ogs-strings.h @@ -54,7 +54,7 @@ extern "C" { #endif -#define OGS_HUGE_LEN 8192 +#define OGS_HUGE_LEN 16384 #if defined(_WIN32) #define ogs_strtok_r strtok_s diff --git a/lib/pfcp/rule-match.c b/lib/pfcp/rule-match.c index f9b87b5c3..3df674897 100644 --- a/lib/pfcp/rule-match.c +++ b/lib/pfcp/rule-match.c @@ -143,8 +143,8 @@ ogs_pfcp_rule_t *ogs_pfcp_pdr_rule_find_by_packet( proto = ip_h->ip_p; ip_hlen = (ip_h->ip_hl)*4; - src_addr = &ip_h->ip_src.s_addr; - dst_addr = &ip_h->ip_dst.s_addr; + src_addr = (void *)&ip_h->ip_src.s_addr; + dst_addr = (void *)&ip_h->ip_dst.s_addr; addr_len = OGS_IPV4_LEN; } else if (ip_h->ip_v == 6) { ip_h = NULL; @@ -152,8 +152,8 @@ ogs_pfcp_rule_t *ogs_pfcp_pdr_rule_find_by_packet( decode_ipv6_header(ip6_h, &proto, &ip_hlen); - src_addr = (uint32_t *)ip6_h->ip6_src.s6_addr; - dst_addr = (uint32_t *)ip6_h->ip6_dst.s6_addr; + src_addr = (void *)ip6_h->ip6_src.s6_addr; + dst_addr = (void *)ip6_h->ip6_dst.s6_addr; addr_len = OGS_IPV6_LEN; } else { ogs_error("Invalid packet [IP version:%d, Packet Length:%d]", diff --git a/lib/proto/types.h b/lib/proto/types.h index bfb4a0f0e..e94448830 100644 --- a/lib/proto/types.h +++ b/lib/proto/types.h @@ -51,7 +51,7 @@ extern "C" { #define OGS_MAX_NUM_OF_GTPU_RESOURCE 4 -#define OGS_MAX_SDU_LEN 8192 +#define OGS_MAX_SDU_LEN OGS_HUGE_LEN #define OGS_MAX_PKT_LEN 2048 #define OGS_PLMN_ID_LEN 3 #define OGS_MAX_PLMN_ID_BCD_LEN 6 diff --git a/lib/sbi/client.c b/lib/sbi/client.c index 94252e11a..6eefe2da7 100644 --- a/lib/sbi/client.c +++ b/lib/sbi/client.c @@ -382,6 +382,8 @@ static connection_t *connection_add( request->h.uri = uri; } + curl_easy_setopt(conn->easy, CURLOPT_BUFFERSIZE, OGS_MAX_SDU_LEN*2); + curl_easy_setopt(conn->easy, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(conn->easy, CURLOPT_SSL_VERIFYHOST, 0); diff --git a/src/scp/sbi-path.c b/src/scp/sbi-path.c index c72605104..bd45645d8 100644 --- a/src/scp/sbi-path.c +++ b/src/scp/sbi-path.c @@ -555,7 +555,7 @@ static int response_handler( ogs_error("No NF-Instance ID"); } - ogs_assert(true == ogs_sbi_server_send_response(stream, response)); + ogs_expect(true == ogs_sbi_server_send_response(stream, response)); scp_assoc_remove(assoc); return OGS_OK; diff --git a/src/upf/gtp-path.c b/src/upf/gtp-path.c index c803ba770..2626fa3cb 100644 --- a/src/upf/gtp-path.c +++ b/src/upf/gtp-path.c @@ -429,7 +429,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data) ogs_assert(far); if (ip_h->ip_v == 4 && sess->ipv4) { - src_addr = &ip_h->ip_src.s_addr; + src_addr = (void *)&ip_h->ip_src.s_addr; ogs_assert(src_addr); /* @@ -460,7 +460,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data) } else if (ip_h->ip_v == 6 && sess->ipv6) { struct ip6_hdr *ip6_h = (struct ip6_hdr *)pkbuf->data; ogs_assert(ip6_h); - src_addr = (uint32_t *)ip6_h->ip6_src.s6_addr; + src_addr = (void *)ip6_h->ip6_src.s6_addr; ogs_assert(src_addr); /* From 337a4e51591a6fc65e93591ed622dbaec6a5dfe6 Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Tue, 10 Jan 2023 12:22:09 +0100 Subject: [PATCH 04/20] [PFCP] Allow up to 8 framed routes for each IP type --- lib/pfcp/message.c | 6 +++++- lib/pfcp/message.h | 10 +++++----- lib/pfcp/support/cache/tlv-group-list.py | 10 ++++++---- lib/pfcp/support/pfcp-tlv.py | 3 +++ lib/proto/types.h | 1 + 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/pfcp/message.c b/lib/pfcp/message.c index d23b45cf1..08f145eb1 100644 --- a/lib/pfcp/message.c +++ b/lib/pfcp/message.c @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by pfcp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-11-26 23:47:22.086824 by acetcom + * Created on: 2023-01-10 12:02:27.807637 by mitmitmitm * from 29244-g91-modified.docx ******************************************************************************/ @@ -2189,8 +2189,10 @@ ogs_tlv_desc_t ogs_pfcp_tlv_desc_pdi = &ogs_pfcp_tlv_desc_ethernet_packet_filter, &ogs_pfcp_tlv_desc_qfi, &ogs_pfcp_tlv_desc_framed_route, + &ogs_tlv_desc_more8, &ogs_pfcp_tlv_desc_framed_routing, &ogs_pfcp_tlv_desc_framed_ipv6_route, + &ogs_tlv_desc_more8, &ogs_pfcp_tlv_desc__interface_type, &ogs_pfcp_tlv_desc_ip_multicast_addressing_info_within_pfcp_session_establishment_request, NULL, @@ -3099,8 +3101,10 @@ ogs_tlv_desc_t ogs_pfcp_tlv_desc_create_traffic_endpoint = &ogs_pfcp_tlv_desc_ue_ip_address, &ogs_pfcp_tlv_desc_ethernet_pdu_session_information, &ogs_pfcp_tlv_desc_framed_route, + &ogs_tlv_desc_more8, &ogs_pfcp_tlv_desc_framed_routing, &ogs_pfcp_tlv_desc_framed_ipv6_route, + &ogs_tlv_desc_more8, &ogs_pfcp_tlv_desc_qfi, &ogs_pfcp_tlv_desc__interface_type, NULL, diff --git a/lib/pfcp/message.h b/lib/pfcp/message.h index bd999f81b..e9f0e2b38 100644 --- a/lib/pfcp/message.h +++ b/lib/pfcp/message.h @@ -20,7 +20,7 @@ /******************************************************************************* * This file had been created by pfcp-tlv.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-11-26 23:47:22.074293 by acetcom + * Created on: 2023-01-10 12:02:27.782476 by mitmitmitm * from 29244-g91-modified.docx ******************************************************************************/ @@ -889,9 +889,9 @@ typedef struct ogs_pfcp_tlv_pdi_s { ogs_pfcp_tlv_ethernet_pdu_session_information_t ethernet_pdu_session_information; ogs_pfcp_tlv_ethernet_packet_filter_t ethernet_packet_filter; ogs_pfcp_tlv_qfi_t qfi; - ogs_pfcp_tlv_framed_route_t framed_route; + ogs_pfcp_tlv_framed_route_t framed_route[8]; ogs_pfcp_tlv_framed_routing_t framed_routing; - ogs_pfcp_tlv_framed_ipv6_route_t framed_ipv6_route; + ogs_pfcp_tlv_framed_ipv6_route_t framed_ipv6_route[8]; ogs_pfcp_tlv__interface_type_t source_interface_type; ogs_pfcp_tlv_ip_multicast_addressing_info_within_pfcp_session_establishment_request_t ip_multicast_addressing_info; } ogs_pfcp_tlv_pdi_t; @@ -1364,9 +1364,9 @@ typedef struct ogs_pfcp_tlv_create_traffic_endpoint_s { ogs_pfcp_tlv_redundant_transmission_parameters_t redundant_transmission_detection_parameters; ogs_pfcp_tlv_ue_ip_address_t ue_ip_address; ogs_pfcp_tlv_ethernet_pdu_session_information_t ethernet_pdu_session_information; - ogs_pfcp_tlv_framed_route_t framed_route; + ogs_pfcp_tlv_framed_route_t framed_route[8]; ogs_pfcp_tlv_framed_routing_t framed_routing; - ogs_pfcp_tlv_framed_ipv6_route_t framed_ipv6_route; + ogs_pfcp_tlv_framed_ipv6_route_t framed_ipv6_route[8]; ogs_pfcp_tlv_qfi_t qfi; ogs_pfcp_tlv__interface_type_t source_interface_type; } ogs_pfcp_tlv_create_traffic_endpoint_t; diff --git a/lib/pfcp/support/cache/tlv-group-list.py b/lib/pfcp/support/cache/tlv-group-list.py index b5896e231..34ba6e013 100644 --- a/lib/pfcp/support/cache/tlv-group-list.py +++ b/lib/pfcp/support/cache/tlv-group-list.py @@ -89,9 +89,11 @@ ies.append({ "ie_type" : "Application ID", "ie_value" : "Application ID", "prese ies.append({ "ie_type" : "Ethernet PDU Session Information", "ie_value" : "Ethernet PDU Session Information", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present to identify all the (DL) Ethernet packets matching an Ethernet PDU session (see clause 5.13.1)."}) ies.append({ "ie_type" : "Ethernet Packet Filter", "ie_value" : "Ethernet Packet Filter", "presence" : "O", "tlv_more" : "0", "comment" : "If present, this IE shall identify the Ethernet PDU to match for the incoming packet.Several IEs with the same IE type may be present to represent a list of Ethernet Packet Filters.The full set of applicable Ethernet Packet filters, if any, shall be provided during the creation or the modification of the PDI."}) ies.append({ "ie_type" : "QFI", "ie_value" : "QFI", "presence" : "O", "tlv_more" : "0", "comment" : "This IE shall not be present if Traffic Endpoint ID is present and the QFI(s) are included in the Traffic Endpoint.If present, this IE shall identify the QoS Flow Identifier to match for the incoming packet.Several IEs with the same IE type may be present to provision a list of QFIs. When present, the full set of applicable QFIs shall be provided during the creation or the modification of the PDI. "}) -ies.append({ "ie_type" : "Framed-Route", "ie_value" : "Framed-Route", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed route.Several IEs with the same IE type may be present to provision a list of framed routes. (NOTE 5)"}) +type_list["Framed-Route"]["max_tlv_more"] = "7" +ies.append({ "ie_type" : "Framed-Route", "ie_value" : "Framed-Route", "presence" : "O", "tlv_more" : "7", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed route.Several IEs with the same IE type may be present to provision a list of framed routes. (NOTE 5)"}) ies.append({ "ie_type" : "Framed-Routing", "ie_value" : "Framed-Routing", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed route. "}) -ies.append({ "ie_type" : "Framed-IPv6-Route", "ie_value" : "Framed-IPv6-Route", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed IPv6 route.Several IEs with the same IE type may be present to provision a list of framed IPv6 routes. (NOTE 5)"}) +type_list["Framed-IPv6-Route"]["max_tlv_more"] = "7" +ies.append({ "ie_type" : "Framed-IPv6-Route", "ie_value" : "Framed-IPv6-Route", "presence" : "O", "tlv_more" : "7", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed IPv6 route.Several IEs with the same IE type may be present to provision a list of framed IPv6 routes. (NOTE 5)"}) ies.append({ "ie_type" : "3GPP Interface Type", "ie_value" : "Source Interface Type", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present to indicate the 3GPP interface type of the source interface, if required by functionalities in the UP Function, e.g. for performance measurements."}) ies.append({ "ie_type" : "IP Multicast Addressing Info within PFCP Session Establishment Request", "ie_value" : "IP Multicast Addressing Info", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present in a DL PDR controlling DL IP multicast traffic (see clause5.25).When present, it shall contain a (range of) IP multicast address(es), and optionally source specific address(es), identifying a set of IP multicast flows. See Table7.5.2.2-4.Several IEs with the same IE type may be present to represent multiple IP multicast flows."}) group_list["PDI"] = { "index" : "102", "type" : "2", "ies" : ies } @@ -206,9 +208,9 @@ ies.append({ "ie_type" : "Network Instance", "ie_value" : "Network Instance", "p ies.append({ "ie_type" : "Redundant Transmission Parameters", "ie_value" : "Redundant Transmission Detection Parameters", "presence" : "O", "tlv_more" : "0", "comment" : "If present, this IE shall contain the information used for the reception of redundant uplink packets on N3/N9 interfaces.See Table7.5.2.2-5."}) ies.append({ "ie_type" : "UE IP Address", "ie_value" : "UE IP address", "presence" : "O", "tlv_more" : "0", "comment" : "If present, this IE shall identify the source or destination IP address to match for the incoming packet. (NOTE 3)The CP function shall set the CHOOSE (CH) bit to 1 if the UP function supports the allocation of UE IP address/ prefix and the CP function requests the UP function to assign a UE IP address/prefix to the Traffic Endpoint."}) ies.append({ "ie_type" : "Ethernet PDU Session Information", "ie_value" : "Ethernet PDU Session Information", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present to identify all the (DL) Ethernet packets matching an Ethernet PDU session (see clause 5.13.1)."}) -ies.append({ "ie_type" : "Framed-Route", "ie_value" : "Framed-Route", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed route.Several IEs with the same IE type may be present to provision a list of framed routes. (NOTE 3)"}) +ies.append({ "ie_type" : "Framed-Route", "ie_value" : "Framed-Route", "presence" : "O", "tlv_more" : "7", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed route.Several IEs with the same IE type may be present to provision a list of framed routes. (NOTE 3)"}) ies.append({ "ie_type" : "Framed-Routing", "ie_value" : "Framed-Routing", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe the framed routing associated to a framed route. "}) -ies.append({ "ie_type" : "Framed-IPv6-Route", "ie_value" : "Framed-IPv6-Route", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed IPv6 route.Several IEs with the same IE type may be present to provision a list of framed IPv6 routes. (NOTE 3)"}) +ies.append({ "ie_type" : "Framed-IPv6-Route", "ie_value" : "Framed-IPv6-Route", "presence" : "O", "tlv_more" : "7", "comment" : "This IE may be present for a DL PDR if the UPF indicated support of Framed Routing (see clause 8.2.25). If present, this IE shall describe a framed IPv6 route.Several IEs with the same IE type may be present to provision a list of framed IPv6 routes. (NOTE 3)"}) ies.append({ "ie_type" : "QFI", "ie_value" : "QFI", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present if the UPF has indicated it supports MTE feature as specified in clause 8.2.25.If present, this IE shall identify the QoS Flow Identifier to match for the incoming packet received from the traffic endpoint.Several IEs with the same IE type may be present to provision a list of QFIs. When present, the full set of applicable QFIs shall be provided."}) ies.append({ "ie_type" : "3GPP Interface Type", "ie_value" : "Source Interface Type", "presence" : "O", "tlv_more" : "0", "comment" : "This IE may be present to indicate the 3GPP interface type of the source interface, if required by functionalities in the UP Function, e.g. for performance measurements.(NOTE 4)"}) group_list["Create Traffic Endpoint"] = { "index" : "227", "type" : "127", "ies" : ies } diff --git a/lib/pfcp/support/pfcp-tlv.py b/lib/pfcp/support/pfcp-tlv.py index 7beb763b0..38bc477fa 100644 --- a/lib/pfcp/support/pfcp-tlv.py +++ b/lib/pfcp/support/pfcp-tlv.py @@ -171,6 +171,9 @@ def get_cells(cells): tlv_more = "3" if ie_type == 'SDF Filter': tlv_more = "7" + if (ie_type == 'Framed-Route' or + ie_type == 'Framed-IPv6-Route'): + tlv_more = "7" if (ie_type == 'Usage Report Session Report Request' or ie_type == 'Usage Report Session Deletion Response' or ie_type == 'Usage Report Session Modification Response'): diff --git a/lib/proto/types.h b/lib/proto/types.h index e94448830..8328b7818 100644 --- a/lib/proto/types.h +++ b/lib/proto/types.h @@ -50,6 +50,7 @@ extern "C" { #define OGS_MAX_NUM_OF_FLOW_IN_BEARER 16 #define OGS_MAX_NUM_OF_GTPU_RESOURCE 4 +#define OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI 8 #define OGS_MAX_SDU_LEN OGS_HUGE_LEN #define OGS_MAX_PKT_LEN 2048 From 88209f52df8de99a25c74f19fb7423f7fba8a393 Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Wed, 18 Jan 2023 12:17:44 +0100 Subject: [PATCH 05/20] [BSF] Handle Ipv4FrameRouteList, save it into context --- src/bsf/context.c | 3 +++ src/bsf/context.h | 3 +++ src/bsf/nbsf-handler.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/bsf/context.c b/src/bsf/context.c index 8add69993..90969df01 100644 --- a/src/bsf/context.c +++ b/src/bsf/context.c @@ -188,6 +188,9 @@ void bsf_sess_remove(bsf_sess_t *sess) ogs_free(sess->ipv6prefix_string); } + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list); + ogs_assert(sess->dnn); ogs_free(sess->dnn); diff --git a/src/bsf/context.h b/src/bsf/context.h index a7de9b001..67583e332 100644 --- a/src/bsf/context.h +++ b/src/bsf/context.h @@ -52,6 +52,9 @@ typedef struct bsf_sess_s { char *ipv4addr_string; char *ipv6prefix_string; + OpenAPI_list_t *ipv4_frame_route_list; + OpenAPI_list_t *ipv6_frame_route_list; + uint32_t ipv4addr; struct { uint8_t len; diff --git a/src/bsf/nbsf-handler.c b/src/bsf/nbsf-handler.c index 3cdb38754..8186faeee 100644 --- a/src/bsf/nbsf-handler.c +++ b/src/bsf/nbsf-handler.c @@ -103,6 +103,31 @@ bool bsf_nbsf_management_handle_pcf_binding( ogs_assert(sess->pcf_fqdn); } + + if (RecvPcfBinding->ipv4_frame_route_list) { + OpenAPI_lnode_t *node = NULL; + + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + sess->ipv4_frame_route_list = OpenAPI_list_create(); + OpenAPI_list_for_each(RecvPcfBinding->ipv4_frame_route_list, node) { + if (!node->data) + continue; + OpenAPI_list_add(sess->ipv4_frame_route_list, ogs_strdup(node->data)); + } + } + + if (RecvPcfBinding->ipv6_frame_route_list) { + OpenAPI_lnode_t *node = NULL; + + OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list); + sess->ipv6_frame_route_list = OpenAPI_list_create(); + OpenAPI_list_for_each(RecvPcfBinding->ipv6_frame_route_list, node) { + if (!node->data) + continue; + OpenAPI_list_add(sess->ipv6_frame_route_list, ogs_strdup(node->data)); + } + } + sess->s_nssai.sst = RecvPcfBinding->snssai->sst; sess->s_nssai.sd = ogs_s_nssai_sd_from_string(RecvPcfBinding->snssai->sd); From 3e980e006fab7afaef75892e1654515eed9f7ced Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Wed, 18 Jan 2023 12:18:39 +0100 Subject: [PATCH 06/20] [PCF] Handle framed routes, forward them to BSF --- src/pcf/context.c | 3 +++ src/pcf/context.h | 3 +++ src/pcf/nbsf-build.c | 3 +++ src/pcf/npcf-handler.c | 24 ++++++++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/src/pcf/context.c b/src/pcf/context.c index 71f3fa6f5..bf8456890 100644 --- a/src/pcf/context.c +++ b/src/pcf/context.c @@ -314,6 +314,9 @@ void pcf_sess_remove(pcf_sess_t *sess) clear_ipv4addr(sess); clear_ipv6prefix(sess); + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list); + if (sess->subscribed_sess_ambr) OpenAPI_ambr_free(sess->subscribed_sess_ambr); if (sess->subscribed_default_qos) diff --git a/src/pcf/context.h b/src/pcf/context.h index cc92a0c40..0dbd446a8 100644 --- a/src/pcf/context.h +++ b/src/pcf/context.h @@ -96,6 +96,9 @@ struct pcf_sess_s { char *ipv4addr_string; char *ipv6prefix_string; + OpenAPI_list_t *ipv4_frame_route_list; + OpenAPI_list_t *ipv6_frame_route_list; + uint32_t ipv4addr; struct { uint8_t len; diff --git a/src/pcf/nbsf-build.c b/src/pcf/nbsf-build.c index d86277ab7..03b6c4006 100644 --- a/src/pcf/nbsf-build.c +++ b/src/pcf/nbsf-build.c @@ -59,6 +59,9 @@ ogs_sbi_request_t *pcf_nbsf_management_build_register( PcfBinding.ipv4_addr = sess->ipv4addr_string; PcfBinding.ipv6_prefix = sess->ipv6prefix_string; + PcfBinding.ipv4_frame_route_list = sess->ipv4_frame_route_list; + PcfBinding.ipv6_frame_route_list = sess->ipv6_frame_route_list; + if (!sess->dnn) { ogs_error("No DNN"); goto end; diff --git a/src/pcf/npcf-handler.c b/src/pcf/npcf-handler.c index 7030f29ed..97cbfc04d 100644 --- a/src/pcf/npcf-handler.c +++ b/src/pcf/npcf-handler.c @@ -296,6 +296,30 @@ bool pcf_npcf_smpolicycontrol_handle_create(pcf_sess_t *sess, pcf_sess_set_ipv6prefix( sess, SmPolicyContextData->ipv6_address_prefix)); + if (SmPolicyContextData->ipv4_frame_route_list) { + OpenAPI_lnode_t *node = NULL; + + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + sess->ipv4_frame_route_list = OpenAPI_list_create(); + OpenAPI_list_for_each(SmPolicyContextData->ipv4_frame_route_list, node) { + if (!node->data) + continue; + OpenAPI_list_add(sess->ipv4_frame_route_list, ogs_strdup(node->data)); + } + } + + if (SmPolicyContextData->ipv6_frame_route_list) { + OpenAPI_lnode_t *node = NULL; + + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + sess->ipv6_frame_route_list = OpenAPI_list_create(); + OpenAPI_list_for_each(SmPolicyContextData->ipv6_frame_route_list, node) { + if (!node->data) + continue; + OpenAPI_list_add(sess->ipv6_frame_route_list, ogs_strdup(node->data)); + } + } + sess->s_nssai.sst = sliceInfo->sst; sess->s_nssai.sd = ogs_s_nssai_sd_from_string(sliceInfo->sd); From 990abbab2cddafec14c7b1cfaa605ea88b46bd7b Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Wed, 18 Jan 2023 12:32:42 +0100 Subject: [PATCH 07/20] [UPF] Handle framed routes --- lib/pfcp/context.c | 20 ++++ lib/pfcp/context.h | 3 + lib/pfcp/handler.c | 52 +++++++++ src/upf/context.c | 248 ++++++++++++++++++++++++++++++++++++++++++- src/upf/context.h | 30 ++++-- src/upf/gtp-path.c | 34 ++++++ src/upf/n4-handler.c | 16 +++ 7 files changed, 395 insertions(+), 8 deletions(-) diff --git a/lib/pfcp/context.c b/lib/pfcp/context.c index 92d425557..173b8da3b 100644 --- a/lib/pfcp/context.c +++ b/lib/pfcp/context.c @@ -1004,6 +1004,8 @@ void ogs_pfcp_pdr_associate_qer(ogs_pfcp_pdr_t *pdr, ogs_pfcp_qer_t *qer) void ogs_pfcp_pdr_remove(ogs_pfcp_pdr_t *pdr) { + int i; + ogs_assert(pdr); ogs_assert(pdr->sess); @@ -1033,6 +1035,24 @@ void ogs_pfcp_pdr_remove(ogs_pfcp_pdr_t *pdr) if (pdr->id_node) ogs_pool_free(&pdr->sess->pdr_id_pool, pdr->id_node); + if (pdr->ipv4_framed_routes) { + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!pdr->ipv4_framed_routes[i]) + break; + ogs_free(pdr->ipv4_framed_routes[i]); + } + ogs_free(pdr->ipv4_framed_routes); + } + + if (pdr->ipv6_framed_routes) { + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!pdr->ipv6_framed_routes[i]) + break; + ogs_free(pdr->ipv6_framed_routes[i]); + } + ogs_free(pdr->ipv6_framed_routes); + } + ogs_pool_free(&ogs_pfcp_pdr_pool, pdr); } diff --git a/lib/pfcp/context.h b/lib/pfcp/context.h index d0a9643a1..81f260d63 100644 --- a/lib/pfcp/context.h +++ b/lib/pfcp/context.h @@ -160,6 +160,9 @@ typedef struct ogs_pfcp_pdr_s { ogs_pfcp_ue_ip_addr_t ue_ip_addr; int ue_ip_addr_len; + char **ipv4_framed_routes; + char **ipv6_framed_routes; + ogs_pfcp_f_teid_t f_teid; int f_teid_len; diff --git a/lib/pfcp/handler.c b/lib/pfcp/handler.c index fe01e8881..86fd1ce4a 100644 --- a/lib/pfcp/handler.c +++ b/lib/pfcp/handler.c @@ -478,6 +478,58 @@ ogs_pfcp_pdr_t *ogs_pfcp_handle_create_pdr(ogs_pfcp_sess_t *sess, pdr->ue_ip_addr_len); } + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!pdr->ipv4_framed_routes || !pdr->ipv4_framed_routes[i]) + break; + ogs_free(pdr->ipv4_framed_routes[i]); + pdr->ipv4_framed_routes[i] = NULL; + } + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!pdr->ipv6_framed_routes || !pdr->ipv6_framed_routes[i]) + break; + ogs_free(pdr->ipv6_framed_routes[i]); + pdr->ipv6_framed_routes[i] = NULL; + } + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + char *route; + + if (!message->pdi.framed_route[i].presence) + break; + + if (!pdr->ipv4_framed_routes) { + pdr->ipv4_framed_routes = ogs_calloc( + OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(pdr->ipv4_framed_routes[0])); + ogs_assert(pdr->ipv4_framed_routes); + } + route = ogs_malloc(message->pdi.framed_route[i].len + 1); + ogs_assert(route); + memcpy(route, message->pdi.framed_route[i].data, + message->pdi.framed_route[i].len); + route[message->pdi.framed_route[i].len] = '\0'; + pdr->ipv4_framed_routes[i] = route; + } + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + char *route; + + if (!message->pdi.framed_ipv6_route[i].presence) + break; + + if (!pdr->ipv6_framed_routes) { + pdr->ipv6_framed_routes = ogs_calloc( + OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(ogs_ipsubnet_t)); + ogs_assert(pdr->ipv6_framed_routes); + } + route = ogs_malloc(message->pdi.framed_ipv6_route[i].len + 1); + ogs_assert(route); + memcpy(route, message->pdi.framed_ipv6_route[i].data, + message->pdi.framed_ipv6_route[i].len); + route[message->pdi.framed_ipv6_route[i].len] = '\0'; + pdr->ipv6_framed_routes[i] = route; + } + memset(&pdr->outer_header_removal, 0, sizeof(pdr->outer_header_removal)); pdr->outer_header_removal_len = 0; diff --git a/src/upf/context.c b/src/upf/context.c index f9ae0c93a..c907faf11 100644 --- a/src/upf/context.c +++ b/src/upf/context.c @@ -44,6 +44,7 @@ void upf_context_init(void) ogs_pfcp_self()->up_function_features.empu = 1; ogs_pfcp_self()->up_function_features.mnop = 1; ogs_pfcp_self()->up_function_features.vtime = 1; + ogs_pfcp_self()->up_function_features.frrt = 1; ogs_pfcp_self()->up_function_features_len = 4; ogs_list_init(&self.sess_list); @@ -61,6 +62,15 @@ void upf_context_init(void) context_initialized = 1; } +static void free_upf_route_trie_node(struct upf_route_trie_node *node) +{ + if (!node) + return; + free_upf_route_trie_node(node->left); + free_upf_route_trie_node(node->right); + ogs_free(node); +} + void upf_context_final(void) { ogs_assert(context_initialized == 1); @@ -76,6 +86,9 @@ void upf_context_final(void) ogs_assert(self.ipv6_hash); ogs_hash_destroy(self.ipv6_hash); + free_upf_route_trie_node(self.ipv4_framed_routes); + free_upf_route_trie_node(self.ipv6_framed_routes); + ogs_pool_final(&upf_sess_pool); context_initialized = 0; @@ -208,6 +221,9 @@ int upf_sess_remove(upf_sess_t *sess) ogs_pfcp_ue_ip_free(sess->ipv6); } + upf_sess_set_ue_ipv4_framed_routes(sess, NULL); + upf_sess_set_ue_ipv6_framed_routes(sess, NULL); + ogs_pfcp_pool_final(&sess->pfcp); ogs_pool_free(&upf_sess_pool, sess); @@ -259,16 +275,66 @@ upf_sess_t *upf_sess_find_by_upf_n4_seid(uint64_t seid) upf_sess_t *upf_sess_find_by_ipv4(uint32_t addr) { + upf_sess_t *ret; + struct upf_route_trie_node *trie = self.ipv4_framed_routes; + const int nbits = sizeof(addr) << 3; + int i; + ogs_assert(self.ipv4_hash); - return (upf_sess_t *)ogs_hash_get(self.ipv4_hash, &addr, OGS_IPV4_LEN); + + ret = ogs_hash_get(self.ipv4_hash, &addr, OGS_IPV4_LEN); + if (ret) + return ret; + + for (i = 0; i <= nbits; i++) { + int bit = nbits - i - 1; + + if (!trie) + break; + if (trie->sess) + ret = trie->sess; + if (i == nbits) + break; + + if ((1 << bit) & be32toh(addr)) + trie = trie->right; + else + trie = trie->left; + } + return ret; } upf_sess_t *upf_sess_find_by_ipv6(uint32_t *addr6) { + upf_sess_t *ret = NULL; + struct upf_route_trie_node *trie = self.ipv6_framed_routes; + int i; + const int chunk_size = sizeof(*addr6) << 3; + ogs_assert(self.ipv6_hash); ogs_assert(addr6); - return (upf_sess_t *)ogs_hash_get( + ret = ogs_hash_get( self.ipv6_hash, addr6, OGS_IPV6_DEFAULT_PREFIX_LEN >> 3); + if (ret) + return ret; + + for (i = 0; i <= OGS_IPV6_128_PREFIX_LEN; i++) { + int part = i / chunk_size; + int bit = (OGS_IPV6_128_PREFIX_LEN - i - 1) % chunk_size; + + if (!trie) + break; + if (trie->sess) + ret = trie->sess; + if (i == OGS_IPV6_128_PREFIX_LEN) + break; + + if ((1 << bit) & be32toh(addr6[part])) + trie = trie->right; + else + trie = trie->left; + } + return ret; } upf_sess_t *upf_sess_add_by_message(ogs_pfcp_message_t *message) @@ -408,6 +474,184 @@ uint8_t upf_sess_set_ue_ip(upf_sess_t *sess, return cause_value; } +/* Remove amd free framed ROUTE from TRIE. It isn't an error if the framed + route doesn't exist in TRIE. */ +static void free_framed_route_from_trie(ogs_ipsubnet_t *route) +{ + const int chunk_size = sizeof(route->sub[0]) << 3; + const int is_ipv4 = route->family == AF_INET; + const int nbits = is_ipv4 ? chunk_size : OGS_IPV6_128_PREFIX_LEN; + struct upf_route_trie_node **trie = + is_ipv4 ? &self.ipv4_framed_routes : &self.ipv6_framed_routes; + + struct upf_route_trie_node **to_free_tries[OGS_IPV6_128_PREFIX_LEN + 1]; + int free_from = 0; + int i = 0; + + for (i = 0; i <= nbits; i++) { + int part = i / chunk_size; + int bit = (nbits - i - 1) % chunk_size; + + if (!*trie) + break; + to_free_tries[i] = trie; + + if (i == nbits || + ((1 << bit) & be32toh(route->mask[part])) == 0) { + (*trie)->sess = NULL; + if ((*trie)->left || (*trie)->right) + free_from = i + 1; + i++; + break; + } + + if ((1 << bit) & be32toh(route->sub[part])) { + if ((*trie)->left || (*trie)->sess) + free_from = i + 1; + trie = &(*trie)->right; + } else { + if ((*trie)->right || (*trie)->sess) + free_from = i + 1; + trie = &(*trie)->left; + } + } + + for (i = i - 1; i >= free_from; i--) { + trie = to_free_tries[i]; + ogs_free(*trie); + *trie = NULL; + } +} + +static void add_framed_route_to_trie(ogs_ipsubnet_t *route, upf_sess_t *sess) +{ + const int chunk_size = sizeof(route->sub[0]) << 3; + const int is_ipv4 = route->family == AF_INET; + const int nbits = is_ipv4 ? chunk_size : OGS_IPV6_128_PREFIX_LEN; + struct upf_route_trie_node **trie = + is_ipv4 ? &self.ipv4_framed_routes : &self.ipv6_framed_routes; + int i = 0; + + for (i = 0; i <= nbits; i++) { + int part = i / chunk_size; + int bit = (- i - 1) % chunk_size; + + if (!*trie) + *trie = ogs_calloc(1, sizeof(**trie)); + + if (i == nbits || + ((1 << bit) & be32toh(route->mask[part])) == 0) { + (*trie)->sess = sess; + break; + } + + if ((1 << bit) & be32toh(route->sub[part])) { + trie = &(*trie)->right; + } else { + trie = &(*trie)->left; + } + } +} + +static int parse_framed_route(ogs_ipsubnet_t *subnet, const char *framed_route) +{ + char *mask = ogs_strdup(framed_route); + char *addr = strsep(&mask, "/"); + int rv; + + rv = ogs_ipsubnet(subnet, addr, mask); + ogs_free(addr); + return rv; +} + +uint8_t upf_sess_set_ue_ipv4_framed_routes(upf_sess_t *sess, + char *framed_routes[]) +{ + int i = 0, j = 0, rv; + uint8_t cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED; + + ogs_assert(sess); + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!sess->ipv4_framed_routes || !sess->ipv4_framed_routes[i].family) + break; + free_framed_route_from_trie(&sess->ipv4_framed_routes[i]); + memset(&sess->ipv4_framed_routes[i], 0, + sizeof(sess->ipv4_framed_routes[i])); + } + + for (i = 0, j = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!framed_routes || !framed_routes[i]) + break; + + if (sess->ipv4_framed_routes == NULL) { + sess->ipv4_framed_routes = ogs_calloc( + OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(ogs_ipsubnet_t)); + ogs_assert(sess->ipv4_framed_routes); + } + + rv = parse_framed_route(&sess->ipv4_framed_routes[j], framed_routes[i]); + + if (rv != OGS_OK) { + ogs_warn("Ignoring invalid framed route %s", framed_routes[i]); + memset(&sess->ipv4_framed_routes[j], 0, + sizeof(sess->ipv4_framed_routes[j])); + continue; + } + add_framed_route_to_trie(&sess->ipv4_framed_routes[j], sess); + j++; + } + if (j == 0 && sess->ipv4_framed_routes) { + ogs_free(sess->ipv4_framed_routes); + sess->ipv4_framed_routes = NULL; + } + + return cause_value; +} + +uint8_t upf_sess_set_ue_ipv6_framed_routes(upf_sess_t *sess, + char *framed_routes[]) +{ + int i = 0, j = 0, rv; + uint8_t cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED; + + ogs_assert(sess); + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!sess->ipv6_framed_routes || !sess->ipv6_framed_routes[i].family) + break; + free_framed_route_from_trie(&sess->ipv6_framed_routes[i]); + } + + for (i = 0, j = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + if (!framed_routes || !framed_routes[i]) + break; + + if (sess->ipv6_framed_routes == NULL) { + sess->ipv6_framed_routes = ogs_calloc( + OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(ogs_ipsubnet_t)); + ogs_assert(sess->ipv6_framed_routes); + } + + rv = parse_framed_route(&sess->ipv6_framed_routes[j], framed_routes[i]); + + if (rv != OGS_OK) { + ogs_warn("Ignoring invalid framed route %s", framed_routes[i]); + memset(&sess->ipv6_framed_routes[j], 0, + sizeof(sess->ipv6_framed_routes[j])); + continue; + } + add_framed_route_to_trie(&sess->ipv6_framed_routes[j], sess); + j++; + } + if (j == 0 && sess->ipv6_framed_routes) { + ogs_free(sess->ipv6_framed_routes); + sess->ipv6_framed_routes = NULL; + } + + return cause_value; +} + void upf_sess_urr_acc_add(upf_sess_t *sess, ogs_pfcp_urr_t *urr, size_t size, bool is_uplink) { upf_sess_urr_acc_t *urr_acc = &sess->urr_acc[urr->id]; diff --git a/src/upf/context.h b/src/upf/context.h index 6fa846219..49747092c 100644 --- a/src/upf/context.h +++ b/src/upf/context.h @@ -45,15 +45,26 @@ extern int __upf_log_domain; #undef OGS_LOG_DOMAIN #define OGS_LOG_DOMAIN __upf_log_domain -typedef struct upf_context_s { - ogs_hash_t *seid_hash; /* hash table (SEID) */ - ogs_hash_t *f_seid_hash; /* hash table (F-SEID) */ - ogs_hash_t *ipv4_hash; /* hash table (IPv4 Address) */ - ogs_hash_t *ipv6_hash; /* hash table (IPv6 Address) */ +struct upf_route_trie_node; - ogs_list_t sess_list; +typedef struct upf_context_s { + ogs_hash_t *seid_hash; /* hash table (SEID) */ + ogs_hash_t *f_seid_hash; /* hash table (F-SEID) */ + ogs_hash_t *ipv4_hash; /* hash table (IPv4 Address) */ + ogs_hash_t *ipv6_hash; /* hash table (IPv6 Address) */ + struct upf_route_trie_node *ipv4_framed_routes; /* IPv4 framed routes trie */ + struct upf_route_trie_node *ipv6_framed_routes; /* IPv6 framed routes trie */ + + ogs_list_t sess_list; } upf_context_t; +/* trie mapping from IP framed routes to session. */ +struct upf_route_trie_node { + struct upf_route_trie_node *left; + struct upf_route_trie_node *right; + upf_sess_t *sess; +}; + /* Accounting: */ typedef struct upf_sess_urr_acc_s { bool reporting_enabled; @@ -99,6 +110,9 @@ typedef struct upf_sess_s { ogs_pfcp_ue_ip_t *ipv4; ogs_pfcp_ue_ip_t *ipv6; + ogs_ipsubnet_t *ipv4_framed_routes; + ogs_ipsubnet_t *ipv6_framed_routes; + char *gx_sid; /* Gx Session ID */ ogs_pfcp_node_t *pfcp_node; @@ -126,6 +140,10 @@ upf_sess_t *upf_sess_find_by_ipv6(uint32_t *addr6); uint8_t upf_sess_set_ue_ip(upf_sess_t *sess, uint8_t session_type, ogs_pfcp_pdr_t *pdr); +uint8_t upf_sess_set_ue_ipv4_framed_routes(upf_sess_t *sess, + char *framed_routes[]); +uint8_t upf_sess_set_ue_ipv6_framed_routes(upf_sess_t *sess, + char *framed_routes[]); void upf_sess_urr_acc_add(upf_sess_t *sess, ogs_pfcp_urr_t *urr, size_t size, bool is_uplink); void upf_sess_urr_acc_fill_usage_report(upf_sess_t *sess, const ogs_pfcp_urr_t *urr, diff --git a/src/upf/gtp-path.c b/src/upf/gtp-path.c index 2626fa3cb..cd99cad01 100644 --- a/src/upf/gtp-path.c +++ b/src/upf/gtp-path.c @@ -61,6 +61,36 @@ static ogs_pkbuf_pool_t *packet_pool = NULL; static void upf_gtp_handle_multicast(ogs_pkbuf_t *recvbuf); +static int check_framed_routes(upf_sess_t *sess, int family, uint32_t *addr) +{ + int i = 0; + ogs_ipsubnet_t *routes = family == AF_INET ? + sess->ipv4_framed_routes : sess->ipv6_framed_routes; + + if (!routes) + return false; + + for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) { + uint32_t *sub = routes[i].sub; + uint32_t *mask = routes[i].mask; + + if (!routes[i].family) + break; + + if (family == AF_INET) { + if (sub[0] == (addr[0] & mask[0])) + return true; + } else { + if (sub[0] == (addr[0] & mask[0]) && + sub[1] == (addr[1] & mask[1]) && + sub[2] == (addr[2] & mask[2]) && + sub[3] == (addr[3] & mask[3])) + return true; + } + } + return false; +} + static uint16_t _get_eth_type(uint8_t *data, uint len) { if (len > ETHER_HDR_LEN) { struct ether_header *hdr = (struct ether_header*)data; @@ -443,6 +473,8 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data) if (src_addr[0] == sess->ipv4->addr[0]) { /* Source IP address should be matched in uplink */ + } else if (check_framed_routes(sess, AF_INET, src_addr)) { + /* Or source IP address should match a framed route */ } else { ogs_error("[DROP] Source IP-%d Spoofing APN:%s SrcIf:%d DstIf:%d TEID:0x%x", ip_h->ip_v, pdr->dnn, pdr->src_if, far->dst_if, teid); @@ -519,6 +551,8 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data) * If Global address * 64 bit prefix should be matched */ + } else if (check_framed_routes(sess, AF_INET6, src_addr)) { + /* Or source IP address should match a framed route */ } else { ogs_error("[DROP] Source IP-%d Spoofing APN:%s SrcIf:%d DstIf:%d TEID:0x%x", ip_h->ip_v, pdr->dnn, pdr->src_if, far->dst_if, teid); diff --git a/src/upf/n4-handler.c b/src/upf/n4-handler.c index d11f7034b..6f1f35982 100644 --- a/src/upf/n4-handler.c +++ b/src/upf/n4-handler.c @@ -138,6 +138,22 @@ void upf_n4_handle_session_establishment_request( } } + if (pdr->ipv4_framed_routes) { + cause_value = + upf_sess_set_ue_ipv4_framed_routes(sess, + pdr->ipv4_framed_routes); + if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) + goto cleanup; + } + + if (pdr->ipv6_framed_routes) { + cause_value = + upf_sess_set_ue_ipv6_framed_routes(sess, + pdr->ipv6_framed_routes); + if (cause_value != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) + goto cleanup; + } + /* Setup UPF-N3-TEID & QFI Hash */ if (pdr->f_teid_len) { ogs_pfcp_object_type_e type = OGS_PFCP_OBJ_SESS_TYPE; From f6439b998c4b99c9f860b8040a34f232f6b2f34e Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Wed, 18 Jan 2023 12:33:50 +0100 Subject: [PATCH 08/20] [SMF] Handle framed routes, forward them to UPF and PCF --- lib/pfcp/build.c | 8 +++++++ lib/proto/types.h | 5 +++++ src/smf/context.c | 8 +++++++ src/smf/npcf-build.c | 37 +++++++++++++++++++++++++++++++++ src/smf/npcf-handler.c | 47 ++++++++++++++++++++++++++++++++++++++++++ src/smf/nudm-handler.c | 32 ++++++++++++++++++++++++++++ 6 files changed, 137 insertions(+) diff --git a/lib/pfcp/build.c b/lib/pfcp/build.c index 723153f38..0d4f64e58 100644 --- a/lib/pfcp/build.c +++ b/lib/pfcp/build.c @@ -314,6 +314,14 @@ void ogs_pfcp_build_create_pdr( message->pdi.ue_ip_address.len = pdr->ue_ip_addr_len; } + for (j = 0; j < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; j++) { + if (!pdr->ipv4_framed_routes || !pdr->ipv4_framed_routes[j]) + break; + message->pdi.framed_route[j].presence = 1; + message->pdi.framed_route[j].data = pdr->ipv4_framed_routes[j]; + message->pdi.framed_route[j].len = strlen(pdr->ipv4_framed_routes[j]); + } + if (pdr->f_teid_len) { memcpy(&pdrbuf[i].f_teid, &pdr->f_teid, pdr->f_teid_len); pdrbuf[i].f_teid.teid = htobe32(pdr->f_teid.teid); diff --git a/lib/proto/types.h b/lib/proto/types.h index 8328b7818..f31d42838 100644 --- a/lib/proto/types.h +++ b/lib/proto/types.h @@ -453,6 +453,9 @@ typedef struct ogs_pcc_rule_s { (__pCCrULE)->num_of_flow = 0; \ } while(0) + +typedef struct OpenAPI_list_s OpenAPI_list_t; + /********************************** * PDN Structure */ typedef struct ogs_session_s { @@ -484,6 +487,8 @@ typedef struct ogs_session_s { ogs_paa_t paa; ogs_ip_t ue_ip; + OpenAPI_list_t *ipv4_framed_routes; + OpenAPI_list_t *ipv6_framed_routes; ogs_ip_t smf_ip; } ogs_session_t; diff --git a/src/smf/context.c b/src/smf/context.c index 8b8eab4e4..7ebc3d0b0 100644 --- a/src/smf/context.c +++ b/src/smf/context.c @@ -1696,6 +1696,7 @@ void smf_sess_remove(smf_sess_t *sess) int i; smf_ue_t *smf_ue = NULL; smf_event_t e; + OpenAPI_lnode_t *node; char buf1[OGS_ADDRSTRLEN]; char buf2[OGS_ADDRSTRLEN]; @@ -1760,6 +1761,13 @@ void smf_sess_remove(smf_sess_t *sess) if (sess->session.name) ogs_free(sess->session.name); + OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node) + OpenAPI_frame_route_info_free(node->data); + OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node) + OpenAPI_frame_route_info_free(node->data); + OpenAPI_list_free(sess->session.ipv4_framed_routes); + OpenAPI_list_free(sess->session.ipv6_framed_routes); + if (sess->upf_n3_addr) ogs_freeaddrinfo(sess->upf_n3_addr); if (sess->upf_n3_addr6) diff --git a/src/smf/npcf-build.c b/src/smf/npcf-build.c index 7e882861e..8ece2a237 100644 --- a/src/smf/npcf-build.c +++ b/src/smf/npcf-build.c @@ -107,6 +107,40 @@ ogs_sbi_request_t *smf_npcf_smpolicycontrol_build_create( } } + if (sess->session.ipv4_framed_routes) { + OpenAPI_list_t *FrameRouteList = OpenAPI_list_create(); + OpenAPI_lnode_t *node; + + OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node) { + OpenAPI_frame_route_info_t *route = node->data; + if (!route) + continue; + if (!route->ipv4_mask) { + ogs_error("Invalid FrameRouteInfo"); + continue; + } + OpenAPI_list_add(FrameRouteList, ogs_strdup(route->ipv4_mask)); + } + SmPolicyContextData.ipv4_frame_route_list = FrameRouteList; + } + + if (sess->session.ipv6_framed_routes) { + OpenAPI_list_t *FrameRouteList = OpenAPI_list_create(); + OpenAPI_lnode_t *node; + + OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node) { + OpenAPI_frame_route_info_t *route = node->data; + if (!route) + continue; + if (!route->ipv6_prefix) { + ogs_error("Invalid FrameRouteInfo"); + continue; + } + OpenAPI_list_add(FrameRouteList, ogs_strdup(route->ipv6_prefix)); + } + SmPolicyContextData.ipv6_frame_route_list = FrameRouteList; + } + if (OGS_SBI_FEATURES_IS_SET(sess->smpolicycontrol_features, OGS_SBI_NPCF_SMPOLICYCONTROL_DN_AUTHORIZATION)) { if (sess->session.ambr.uplink) { @@ -191,6 +225,9 @@ end: if (SmPolicyContextData.ipv6_address_prefix) ogs_free(SmPolicyContextData.ipv6_address_prefix); + OpenAPI_clear_and_free_string_list(SmPolicyContextData.ipv4_frame_route_list); + OpenAPI_clear_and_free_string_list(SmPolicyContextData.ipv6_frame_route_list); + return request; } diff --git a/src/smf/npcf-handler.c b/src/smf/npcf-handler.c index d44cc43da..c1cbbe344 100644 --- a/src/smf/npcf-handler.c +++ b/src/smf/npcf-handler.c @@ -492,6 +492,53 @@ bool smf_npcf_smpolicycontrol_handle_create( ogs_pfcp_paa_to_ue_ip_addr(&sess->session.paa, &ul_pdr->ue_ip_addr, &ul_pdr->ue_ip_addr_len)); + if (sess->session.ipv4_framed_routes && + sess->pfcp_node->up_function_features.frrt) { + OpenAPI_frame_route_info_t *FrameRouteInfo = NULL; + int i = 0; + OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node) { + FrameRouteInfo = node->data; + if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI) + break; + if (!FrameRouteInfo) + continue; + if (!FrameRouteInfo->ipv4_mask) { + ogs_error("Invalid FrameRouteInfo"); + continue; + } + if (!dl_pdr->ipv4_framed_routes) { + dl_pdr->ipv4_framed_routes = + ogs_calloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, + sizeof(dl_pdr->ipv4_framed_routes[0])); + ogs_assert(dl_pdr->ipv4_framed_routes); + } + dl_pdr->ipv4_framed_routes[i++] = ogs_strdup(FrameRouteInfo->ipv4_mask); + } + } + + if (sess->session.ipv6_framed_routes && + sess->pfcp_node->up_function_features.frrt) { + OpenAPI_frame_route_info_t *FrameRouteInfo = NULL; + int i = 0; + OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node) { + FrameRouteInfo = node->data; + if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI) + continue; + if (!FrameRouteInfo) + continue; + if (!FrameRouteInfo->ipv6_prefix) { + ogs_error("Invalid FrameRouteInfo"); + continue; + } + if (!dl_pdr->ipv6_framed_routes) { + dl_pdr->ipv6_framed_routes = + ogs_malloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI); + ogs_assert(dl_pdr->ipv6_framed_routes); + } + dl_pdr->ipv6_framed_routes[i++] = ogs_strdup(FrameRouteInfo->ipv6_prefix); + } + } + ogs_info("UE SUPI[%s] DNN[%s] IPv4[%s] IPv6[%s]", smf_ue->supi, sess->session.name, sess->ipv4 ? OGS_INET_NTOP(&sess->ipv4->addr, buf1) : "", diff --git a/src/smf/nudm-handler.c b/src/smf/nudm-handler.c index c663cfb72..69b64eba5 100644 --- a/src/smf/nudm-handler.c +++ b/src/smf/nudm-handler.c @@ -45,6 +45,8 @@ bool smf_nudm_sdm_handle_get(smf_sess_t *sess, ogs_sbi_stream_t *stream, OpenAPI_ambr_t *sessionAmbr = NULL; OpenAPI_list_t *staticIpAddress = NULL; OpenAPI_ip_address_t *ipAddress = NULL; + OpenAPI_list_t *ipv4FrameRouteList = NULL; + OpenAPI_list_t *ipv6FrameRouteList = NULL; OpenAPI_lnode_t *node = NULL, *node2 = NULL; ogs_assert(sess); @@ -242,6 +244,36 @@ bool smf_nudm_sdm_handle_get(smf_sess_t *sess, ogs_sbi_stream_t *stream, } } + ipv4FrameRouteList = dnnConfiguration->ipv4_frame_route_list; + if (ipv4FrameRouteList) { + if (sess->session.ipv4_framed_routes) { + OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node2) + OpenAPI_frame_route_info_free(node2->data); + OpenAPI_list_clear(sess->session.ipv4_framed_routes); + } else { + sess->session.ipv4_framed_routes = OpenAPI_list_create(); + } + OpenAPI_list_for_each(ipv4FrameRouteList, node2) { + OpenAPI_list_add(sess->session.ipv4_framed_routes, + OpenAPI_frame_route_info_copy(NULL, node2->data)); + } + } + + ipv6FrameRouteList = dnnConfiguration->ipv6_frame_route_list; + if (ipv6FrameRouteList) { + if (sess->session.ipv6_framed_routes) { + OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node2) + OpenAPI_frame_route_info_free(node2->data); + OpenAPI_list_clear(sess->session.ipv6_framed_routes); + } else { + sess->session.ipv6_framed_routes = OpenAPI_list_create(); + } + OpenAPI_list_for_each(ipv6FrameRouteList, node2) { + OpenAPI_list_add(sess->session.ipv6_framed_routes, + OpenAPI_frame_route_info_copy(NULL, node2->data)); + } + } + /* Succeeded to get PDU Session */ if (!sess->session.name) sess->session.name = ogs_strdup(dnnConfigurationMap->key); From a8f83989f4fdd55a176de3f159aa026750a5c5a8 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 09:29:00 +0900 Subject: [PATCH 09/20] Follow-up on #2009 --- lib/pfcp/build.c | 8 ++++++++ lib/pfcp/handler.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/pfcp/build.c b/lib/pfcp/build.c index 0d4f64e58..bd3bef681 100644 --- a/lib/pfcp/build.c +++ b/lib/pfcp/build.c @@ -322,6 +322,14 @@ void ogs_pfcp_build_create_pdr( message->pdi.framed_route[j].len = strlen(pdr->ipv4_framed_routes[j]); } + for (j = 0; j < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; j++) { + if (!pdr->ipv6_framed_routes || !pdr->ipv6_framed_routes[j]) + break; + message->pdi.framed_ipv6_route[j].presence = 1; + message->pdi.framed_ipv6_route[j].data = pdr->ipv6_framed_routes[j]; + message->pdi.framed_ipv6_route[j].len = strlen(pdr->ipv6_framed_routes[j]); + } + if (pdr->f_teid_len) { memcpy(&pdrbuf[i].f_teid, &pdr->f_teid, pdr->f_teid_len); pdrbuf[i].f_teid.teid = htobe32(pdr->f_teid.teid); diff --git a/lib/pfcp/handler.c b/lib/pfcp/handler.c index 86fd1ce4a..f8195103e 100644 --- a/lib/pfcp/handler.c +++ b/lib/pfcp/handler.c @@ -519,7 +519,7 @@ ogs_pfcp_pdr_t *ogs_pfcp_handle_create_pdr(ogs_pfcp_sess_t *sess, if (!pdr->ipv6_framed_routes) { pdr->ipv6_framed_routes = ogs_calloc( - OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(ogs_ipsubnet_t)); + OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI, sizeof(pdr->ipv6_framed_routes[0])); ogs_assert(pdr->ipv6_framed_routes); } route = ogs_malloc(message->pdi.framed_ipv6_route[i].len + 1); From 689574a2d9ce9f10d9a5b861a1b5953171eed095 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 10:37:22 +0900 Subject: [PATCH 10/20] [AMF/MME] Fixed crash when no NG/S1 context(#2012) --- lib/core/ogs-errno.h | 11 +- lib/core/ogs-pkbuf.c | 2 + src/amf/amf-sm.c | 50 +- src/amf/gmm-handler.c | 89 ++- src/amf/gmm-sm.c | 275 ++++---- src/amf/namf-handler.c | 41 +- src/amf/nas-path.c | 248 ++++--- src/amf/nausf-handler.c | 6 +- src/amf/ngap-handler.c | 1351 +++++++++++++++++++++---------------- src/amf/ngap-path.c | 148 ++-- src/amf/ngap-path.h | 2 - src/amf/ngap-sm.c | 7 +- src/amf/nnrf-handler.c | 23 +- src/amf/nnssf-handler.c | 34 +- src/amf/npcf-handler.c | 42 +- src/amf/nsmf-handler.c | 260 ++++--- src/amf/nudm-handler.c | 23 +- src/amf/sbi-path.c | 71 +- src/mme/emm-handler.c | 45 +- src/mme/emm-sm.c | 312 +++++---- src/mme/esm-handler.c | 56 +- src/mme/esm-sm.c | 60 +- src/mme/mme-context.c | 50 +- src/mme/mme-gtp-path.c | 8 +- src/mme/mme-path.c | 43 +- src/mme/mme-s11-handler.c | 181 +++-- src/mme/mme-s6a-handler.c | 23 +- src/mme/mme-sm.c | 55 +- src/mme/nas-path.c | 285 +++++--- src/mme/s1ap-handler.c | 1006 ++++++++++++++++----------- src/mme/s1ap-path.c | 140 +++- src/mme/sbc-handler.c | 24 +- src/mme/sgsap-handler.c | 45 +- src/mme/sgsap-path.c | 45 +- src/nrf/sbi-path.c | 21 +- src/pcf/sbi-path.c | 36 +- src/smf/sbi-path.c | 5 +- 37 files changed, 3122 insertions(+), 2001 deletions(-) diff --git a/lib/core/ogs-errno.h b/lib/core/ogs-errno.h index a18631bb4..78cbd3c05 100644 --- a/lib/core/ogs-errno.h +++ b/lib/core/ogs-errno.h @@ -74,11 +74,12 @@ typedef int ogs_err_t; #endif -#define OGS_OK 0 -#define OGS_ERROR -1 -#define OGS_RETRY -2 -#define OGS_TIMEUP -3 -#define OGS_DONE -4 +#define OGS_OK 0 +#define OGS_ERROR -1 +#define OGS_RETRY -2 +#define OGS_TIMEUP -3 +#define OGS_DONE -4 +#define OGS_NOTFOUND -5 char *ogs_strerror(ogs_err_t err, char *buf, size_t size); diff --git a/lib/core/ogs-pkbuf.c b/lib/core/ogs-pkbuf.c index b8d4b716c..85eb90ae6 100644 --- a/lib/core/ogs-pkbuf.c +++ b/lib/core/ogs-pkbuf.c @@ -318,6 +318,7 @@ ogs_pkbuf_t *ogs_pkbuf_copy_debug(ogs_pkbuf_t *pkbuf, const char *file_line) newbuf = ogs_pkbuf_alloc_debug(NULL, size, file_line); if (!newbuf) { ogs_error("ogs_pkbuf_alloc() failed [size=%d]", size); + ogs_pkbuf_free(pkbuf); return NULL; } @@ -344,6 +345,7 @@ ogs_pkbuf_t *ogs_pkbuf_copy_debug(ogs_pkbuf_t *pkbuf, const char *file_line) ogs_pool_alloc(&pool->pkbuf, &newbuf); if (!newbuf) { ogs_error("ogs_pkbuf_copy() failed"); + ogs_pkbuf_free(pkbuf); ogs_thread_mutex_unlock(&pool->mutex); return NULL; } diff --git a/src/amf/amf-sm.c b/src/amf/amf-sm.c index 6a68da658..95a4c4c4d 100644 --- a/src/amf/amf-sm.c +++ b/src/amf/amf-sm.c @@ -45,7 +45,7 @@ void amf_state_final(ogs_fsm_t *s, amf_event_t *e) void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) { - int rv; + int r, rv; char buf[OGS_ADDRSTRLEN]; const char *api_version = NULL; @@ -621,9 +621,10 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) } ogs_error("[%s] Cannot receive SBI message", amf_ue->suci); - ogs_expect(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi(amf_ue, - OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); + r = nas_5gs_send_gmm_reject_from_sbi(amf_ue, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OGS_SBI_OBJ_SESS_TYPE: @@ -638,16 +639,17 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) ogs_error("[%d:%d] Cannot receive SBI message", sess->psi, sess->pti); if (sess->payload_container_type) { - ogs_expect(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_transport, - NGAP_CauseTransport_transport_resource_unavailable) - ); + NGAP_CauseTransport_transport_resource_unavailable); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -755,10 +757,11 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) ogs_fsm_dispatch(&gnb->sm, e); } else { ogs_error("Cannot decode NGAP message"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, NULL, NULL, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } ogs_ngap_free(&ngap_message); @@ -776,7 +779,9 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) pkbuf = e->pkbuf; ogs_assert(pkbuf); - ogs_expect(OGS_OK == ngap_send_to_ran_ue(ran_ue, pkbuf)); + r = ngap_send_to_ran_ue(ran_ue, pkbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_timer_delete(e->timer); break; case AMF_TIMER_NG_HOLDING: @@ -811,11 +816,13 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) if (!amf_ue) { amf_ue = amf_ue_add(ran_ue); if (amf_ue == NULL) { - ogs_expect(OGS_OK == - ngap_send_ran_ue_context_release_command(ran_ue, + r = ngap_send_ran_ue_context_release_command( + ran_ue, NGAP_Cause_PR_misc, NGAP_CauseMisc_control_processing_overload, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_pkbuf_free(pkbuf); return; } @@ -871,10 +878,11 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) /* De-associate NG with NAS/EMM */ ran_ue_deassociate(amf_ue->ran_ue); - ogs_expect(OGS_OK == - ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, + r = ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } amf_ue_associate_ran_ue(amf_ue, ran_ue); diff --git a/src/amf/gmm-handler.c b/src/amf/gmm-handler.c index 163a6c73e..1a2472bae 100644 --- a/src/amf/gmm-handler.c +++ b/src/amf/gmm-handler.c @@ -548,7 +548,7 @@ ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue, { amf_sess_t *sess = NULL; uint16_t psimask = 0; - int xact_count = 0; + int xact_count = 0, r; ogs_nas_uplink_data_status_t *uplink_data_status = NULL; ogs_nas_pdu_session_status_t *pdu_session_status = NULL; @@ -634,9 +634,11 @@ ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue, } } - if (amf_sess_xact_count(amf_ue) == xact_count) - ogs_assert(OGS_OK == - nas_5gs_send_service_accept(amf_ue)); + if (amf_sess_xact_count(amf_ue) == xact_count) { + r = nas_5gs_send_service_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } return OGS_5GMM_CAUSE_REQUEST_ACCEPTED; } @@ -644,6 +646,7 @@ ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue, int gmm_handle_deregistration_request(amf_ue_t *amf_ue, ogs_nas_5gs_deregistration_request_from_ue_t *deregistration_request) { + int r; ogs_nas_de_registration_type_t *de_registration_type = NULL; ogs_assert(amf_ue); @@ -690,9 +693,11 @@ int gmm_handle_deregistration_request(amf_ue_t *amf_ue, amf_sbi_send_release_all_sessions( amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); - if (ogs_list_count(&amf_ue->sess_list) == 0) - ogs_assert(OGS_OK == - nas_5gs_send_de_registration_accept(amf_ue)); + if (ogs_list_count(&amf_ue->sess_list) == 0) { + r = nas_5gs_send_de_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } return OGS_OK; } @@ -885,6 +890,7 @@ ogs_nas_5gmm_cause_t gmm_handle_security_mode_complete(amf_ue_t *amf_ue, int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, ogs_nas_5gs_ul_nas_transport_t *ul_nas_transport) { + int r; ogs_slice_data_t *selected_slice = NULL; amf_sess_t *sess = NULL; amf_nsmf_pdusession_sm_context_param_t param; @@ -906,34 +912,38 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, if (!payload_container_type->value) { ogs_error("[%s] No Payload container type", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status( - amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION)); + r = nas_5gs_send_gmm_status( + amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!payload_container->length) { ogs_error("[%s] No Payload container length", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status( - amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION)); + r = nas_5gs_send_gmm_status( + amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!payload_container->buffer) { ogs_error("[%s] No Payload container buffer", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status( - amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION)); + r = nas_5gs_send_gmm_status( + amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if ((ul_nas_transport->presencemask & OGS_NAS_5GS_UL_NAS_TRANSPORT_PDU_SESSION_ID_PRESENT) == 0) { ogs_error("[%s] No PDU session ID", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status( - amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION)); + r = nas_5gs_send_gmm_status( + amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -941,9 +951,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, if (*pdu_session_id == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("[%s] PDU session identity is unassigned", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status( - amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION)); + r = nas_5gs_send_gmm_status( + amf_ue, OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -964,9 +975,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, if (!sess) { ogs_error("[%s] No Session Context [%d]", amf_ue->supi, gsm_header->message_type); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status(amf_ue, - OGS_5GMM_CAUSE_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION)); + r = nas_5gs_send_gmm_status(amf_ue, + OGS_5GMM_CAUSE_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } } @@ -1072,8 +1084,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, if (!selected_slice || !sess->dnn) { ogs_warn("[%s] DNN Not Supported OR " "Not Subscribed in the Slice", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status(amf_ue, OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE)); + r = nas_5gs_send_gmm_status(amf_ue, + OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -1137,9 +1151,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("[%s:%d] Session Context is not in SMF [%d]", amf_ue->supi, sess->psi, gsm_header->message_type); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE, 0)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -1192,9 +1207,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, memset(¶m, 0, sizeof(param)); param.acknowledgement_requested = 1; param.guti = 1; - ogs_assert(OGS_OK == - nas_5gs_send_configuration_update_command( - amf_ue, ¶m)); + r = nas_5gs_send_configuration_update_command( + amf_ue, ¶m); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_PAGING_INFO(amf_ue); } @@ -1212,9 +1228,10 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, default: ogs_error("[%s] Unknown Payload container type [%d]", amf_ue->supi, payload_container_type->value); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status(amf_ue, - OGS_5GMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED)); + r = nas_5gs_send_gmm_status(amf_ue, + OGS_5GMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } diff --git a/src/amf/gmm-sm.c b/src/amf/gmm-sm.c index cf5796b6f..19f30a3b9 100644 --- a/src/amf/gmm-sm.c +++ b/src/amf/gmm-sm.c @@ -58,7 +58,7 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e) ogs_sbi_message_t *sbi_message = NULL; - int state = 0; + int r, state = 0; ogs_assert(e); @@ -96,8 +96,9 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e) OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { amf_ue->t3570.retry_count++; - ogs_assert(OGS_OK == - nas_5gs_send_identity_request(amf_ue)); + r = nas_5gs_send_identity_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -110,9 +111,10 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e) OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { amf_ue->t3522.retry_count++; - ogs_assert(OGS_OK == - nas_5gs_send_de_registration_request(amf_ue, - OpenAPI_deregistration_reason_NULL)); + r = nas_5gs_send_de_registration_request(amf_ue, + OpenAPI_deregistration_reason_NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -287,9 +289,11 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e) break; CASE(OGS_SBI_HTTP_METHOD_DELETE) - if (state != AMF_NETWORK_INITIATED_DE_REGISTERED) - ogs_assert(OGS_OK == - nas_5gs_send_de_registration_accept(amf_ue)); + if (state != AMF_NETWORK_INITIATED_DE_REGISTERED) { + r = nas_5gs_send_de_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } PCF_AM_POLICY_CLEAR(amf_ue); break; @@ -320,7 +324,7 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e) void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e) { - int i; + int i, r; amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -389,7 +393,9 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e) } else { amf_ue->t3513.retry_count++; /* If t3513 is timeout, the saved pkbuf is used. */ - ogs_assert(OGS_OK == ngap_send_paging(amf_ue)); + r = ngap_send_paging(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -408,8 +414,9 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e) * If t3555 is timeout, the saved pkbuf is used. * In this case, ack should be set to 1 for timer expiration */ - ogs_assert(OGS_OK == - nas_5gs_send_configuration_update_command(amf_ue, NULL)); + r = nas_5gs_send_configuration_update_command(amf_ue, NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -422,8 +429,9 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e) OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { amf_ue->t3570.retry_count++; - ogs_assert(OGS_OK == - nas_5gs_send_identity_request(amf_ue)); + r = nas_5gs_send_identity_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -507,7 +515,7 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e) static void common_register_state(ogs_fsm_t *s, amf_event_t *e) { - int rv, xact_count = 0; + int r, rv, xact_count = 0; ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; @@ -548,16 +556,18 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("gmm_handle_registration_request() failed [%d]", gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } if (!AMF_UE_HAVE_SUCI(amf_ue)) { CLEAR_AMF_UE_TIMER(amf_ue->t3570); - ogs_assert(OGS_OK == - nas_5gs_send_identity_request(amf_ue)); + r = nas_5gs_send_identity_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; } @@ -568,8 +578,9 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_registration_update() " "failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -595,8 +606,9 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) } CLEAR_AMF_UE_TIMER(amf_ue->t3550); - ogs_assert(OGS_OK == - nas_5gs_send_registration_accept(amf_ue)); + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } if (amf_ue->next.m_tmsi) @@ -628,28 +640,29 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_service_request() failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_service_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } if (!AMF_UE_HAVE_SUCI(amf_ue)) { ogs_info("Service request : Unknown UE"); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_5gs_send_service_reject(amf_ue, + OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } if (!h.integrity_protected || !SECURITY_CONTEXT_IS_VALID(amf_ue)) { ogs_error("No Security Context"); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_5gs_send_service_reject(amf_ue, + OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -659,8 +672,9 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_service_update() failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_service_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); } @@ -719,10 +733,11 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) /* De-associate NG with NAS/EMM */ ran_ue_deassociate(amf_ue->ran_ue); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, + r = ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, NGAP_Cause_PR_misc, NGAP_CauseMisc_om_intervention, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &gmm_state_de_registered); break; @@ -789,7 +804,7 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) { - int rv; + int r, rv; ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; @@ -835,8 +850,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) amf_ue, &nas_message->gmm.authentication_response); if (rv != OGS_OK) { - ogs_assert(OGS_OK == - nas_5gs_send_authentication_reject(amf_ue)); + r = nas_5gs_send_authentication_reject(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } break; @@ -893,8 +909,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) break; } - ogs_assert(OGS_OK == - nas_5gs_send_authentication_reject(amf_ue)); + r = nas_5gs_send_authentication_reject(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); break; @@ -906,8 +923,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_registration_request() failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -944,17 +962,15 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) amf_timer_cfg(AMF_TIMER_T3560)->max_count) { ogs_warn("[%s] Retransmission failed. Stop retransmission", amf_ue->suci); - ogs_assert(OGS_OK == - nas_5gs_send_authentication_reject(amf_ue)); + r = nas_5gs_send_authentication_reject(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { - rv = nas_5gs_send_authentication_request(amf_ue); - if (rv == OGS_OK) { - amf_ue->t3560.retry_count++; - } else { - ogs_error("nas_5gs_send_authentication_request() failed"); - OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); - } + amf_ue->t3560.retry_count++; + r = nas_5gs_send_authentication_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -982,9 +998,10 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) ogs_error("[%s] HTTP response error [%d]", amf_ue->suci, sbi_message->res_status); } - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, sbi_message->res_status)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, sbi_message->res_status); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); break; } @@ -996,8 +1013,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) if (rv != OGS_OK) { ogs_error("[%s] Cannot handle SBI message", amf_ue->suci); - ogs_assert(OGS_OK == - nas_5gs_send_authentication_reject(amf_ue)); + r = nas_5gs_send_authentication_reject(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } break; @@ -1007,8 +1025,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) if (rv != OGS_OK) { ogs_error("[%s] Cannot handle SBI message", amf_ue->suci); - ogs_assert(OGS_OK == - nas_5gs_send_authentication_reject(amf_ue)); + r = nas_5gs_send_authentication_reject(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_security_mode); @@ -1042,7 +1061,7 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) { - int rv; + int r; ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; ogs_nas_5gs_message_t *nas_message = NULL; @@ -1059,8 +1078,9 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) switch (e->h.id) { case OGS_FSM_ENTRY_SIG: CLEAR_AMF_UE_TIMER(amf_ue->t3560); - ogs_assert(OGS_OK == - nas_5gs_send_security_mode_command(amf_ue)); + r = nas_5gs_send_security_mode_command(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OGS_FSM_EXIT_SIG: break; @@ -1109,8 +1129,9 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) ogs_error("[%s] gmm_handle_security_mode_complete() " "failed [%d] in type [%d]", amf_ue->suci, gmm_cause, amf_ue->nas.message_type); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_gmm_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1151,8 +1172,9 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_registration_request() failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1167,10 +1189,10 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) case OGS_NAS_5GS_SERVICE_REQUEST: ogs_info("[%s] Service request", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_5gs_send_service_reject(amf_ue, + OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &gmm_state_exception); break; @@ -1199,18 +1221,16 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) if (amf_ue->t3560.retry_count >= amf_timer_cfg(AMF_TIMER_T3560)->max_count) { ogs_warn("[%s] Retransmission failed. Stop", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject(amf_ue, - OGS_5GMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); + r = nas_5gs_send_gmm_reject(amf_ue, + OGS_5GMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { - rv = nas_5gs_send_security_mode_command(amf_ue); - if (rv == OGS_OK) { - amf_ue->t3560.retry_count++; - } else { - ogs_error("nas_5gs_send_security_mode_command() failed"); - OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); - } + amf_ue->t3560.retry_count++; + r = nas_5gs_send_security_mode_command(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -1227,7 +1247,7 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) { - int rv, state, xact_count = 0; + int rv, r, state, xact_count = 0; ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; @@ -1274,9 +1294,10 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) sbi_message->res_status != OGS_SBI_HTTP_STATUS_OK) { ogs_error("[%s] HTTP response error [%d]", amf_ue->supi, sbi_message->res_status); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject( - amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED)); + r = nas_5gs_send_gmm_reject( + amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); break; } @@ -1316,9 +1337,10 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) (sbi_message->res_status != OGS_SBI_HTTP_STATUS_CREATED)) { ogs_error("[%s] HTTP response error [%d]", amf_ue->supi, sbi_message->res_status); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject( - amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED)); + r = nas_5gs_send_gmm_reject( + amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); break; } @@ -1328,9 +1350,10 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) if (rv != OGS_OK) { ogs_error("[%s] amf_nudm_sdm_handle_provisioned(%s) failed", amf_ue->supi, sbi_message->h.resource.component[1]); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject( - amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED)); + r = nas_5gs_send_gmm_reject( + amf_ue, OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); break; } @@ -1360,8 +1383,9 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) ogs_assert(amf_ue->nas.message_type == OGS_NAS_5GS_REGISTRATION_REQUEST); CLEAR_AMF_UE_TIMER(amf_ue->t3550); - ogs_assert(OGS_OK == - nas_5gs_send_registration_accept(amf_ue)); + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* In nsmf-handler.c * @@ -1465,8 +1489,9 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) */ memset(¶m, 0, sizeof(param)); param.nitz = 1; - ogs_assert(OGS_OK == - nas_5gs_send_configuration_update_command(amf_ue, ¶m)); + r = nas_5gs_send_configuration_update_command(amf_ue, ¶m); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &gmm_state_registered); break; @@ -1479,8 +1504,9 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_registration_request() failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1499,10 +1525,10 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) case OGS_NAS_5GS_SERVICE_REQUEST: ogs_info("[%s] Service request", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_service_reject(amf_ue, - OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_5gs_send_service_reject(amf_ue, + OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &gmm_state_exception); break; @@ -1534,13 +1560,10 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) amf_ue->suci); OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); } else { - rv = nas_5gs_send_registration_accept(amf_ue); - if (rv == OGS_OK) { - amf_ue->t3550.retry_count++; - } else { - ogs_error("nas_5gs_send_registration_accept() failed"); - OGS_FSM_TRAN(&amf_ue->sm, &gmm_state_exception); - } + amf_ue->t3550.retry_count++; + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -1557,7 +1580,7 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) { - int xact_count = 0; + int xact_count = 0, r; ogs_nas_5gmm_cause_t gmm_cause; amf_ue_t *amf_ue = NULL; @@ -1588,11 +1611,13 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) amf_sbi_send_release_all_sessions( amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); - if (ogs_list_count(&amf_ue->sess_list) == 0) - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + if (ogs_list_count(&amf_ue->sess_list) == 0) { + r = ngap_send_amf_ue_context_release_command(amf_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } break; case OGS_FSM_EXIT_SIG: break; @@ -1617,16 +1642,18 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("gmm_handle_registration_request() failed [%d]", gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } if (!AMF_UE_HAVE_SUCI(amf_ue)) { CLEAR_AMF_UE_TIMER(amf_ue->t3570); - ogs_assert(OGS_OK == - nas_5gs_send_identity_request(amf_ue)); + r = nas_5gs_send_identity_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &gmm_state_de_registered); break; @@ -1639,8 +1666,9 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) { ogs_error("[%s] gmm_handle_registration_update() " "failed [%d]", amf_ue->suci, gmm_cause); - ogs_assert(OGS_OK == - nas_5gs_send_registration_reject(amf_ue, gmm_cause)); + r = nas_5gs_send_registration_reject(amf_ue, gmm_cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); break; } @@ -1664,8 +1692,9 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) } CLEAR_AMF_UE_TIMER(amf_ue->t3550); - ogs_assert(OGS_OK == - nas_5gs_send_registration_accept(amf_ue)); + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } if (amf_ue->next.m_tmsi) diff --git a/src/amf/namf-handler.c b/src/amf/namf-handler.c index 3bfe368f9..0c2325f4b 100644 --- a/src/amf/namf-handler.c +++ b/src/amf/namf-handler.c @@ -27,7 +27,7 @@ int amf_namf_comm_handle_n1_n2_message_transfer( ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) { - int status; + int status, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -206,7 +206,9 @@ int amf_namf_comm_handle_n1_n2_message_transfer( * sm-context-ref is created in [1-CLIENT]. * So, the PDU session establishment accpet can be transmitted. */ - ogs_expect(OGS_OK == ngap_send_to_ran_ue(ran_ue, ngapbuf)); + r = ngap_send_to_ran_ue(ran_ue, ngapbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { sess->pdu_session_establishment_accept = ngapbuf; } @@ -285,12 +287,15 @@ int amf_namf_comm_handle_n1_n2_message_transfer( AMF_SESS_STORE_N2_TRANSFER( sess, pdu_session_resource_setup_request, n2buf); - ogs_assert(OGS_OK == ngap_send_paging(amf_ue)); + r = ngap_send_paging(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (CM_CONNECTED(amf_ue)) { - ogs_assert(OGS_OK == - nas_send_pdu_session_setup_request(sess, NULL, n2buf)); + r = nas_send_pdu_session_setup_request(sess, NULL, n2buf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { @@ -349,12 +354,15 @@ int amf_namf_comm_handle_n1_n2_message_transfer( OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND, n1buf, n2buf); - ogs_assert(OGS_OK == ngap_send_paging(amf_ue)); + r = ngap_send_paging(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (CM_CONNECTED(amf_ue)) { - ogs_expect(OGS_OK == - nas_send_pdu_session_modification_command(sess, n1buf, n2buf)); + r = nas_send_pdu_session_modification_command(sess, n1buf, n2buf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_fatal("[%s] Invalid AMF-UE state", amf_ue->supi); @@ -386,8 +394,9 @@ int amf_namf_comm_handle_n1_n2_message_transfer( } } else if (CM_CONNECTED(amf_ue)) { - ogs_expect(OGS_OK == - nas_send_pdu_session_release_command(sess, NULL, n2buf)); + r = nas_send_pdu_session_release_command(sess, NULL, n2buf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_fatal("[%s] Invalid AMF-UE state", amf_ue->supi); ogs_assert_if_reached(); @@ -512,11 +521,13 @@ cleanup: static int do_network_initiated_de_register( amf_ue_t *amf_ue, OpenAPI_deregistration_reason_e dereg_reason) { + int r; if ((CM_CONNECTED(amf_ue)) && (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_registered))) { - ogs_assert(OGS_OK == - nas_5gs_send_de_registration_request(amf_ue, dereg_reason)); + r = nas_5gs_send_de_registration_request(amf_ue, dereg_reason); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); amf_sbi_send_release_all_sessions( amf_ue, AMF_NETWORK_INITIATED_DE_REGISTERED); @@ -809,6 +820,7 @@ int amf_namf_callback_handle_sdm_data_change_notify( ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) { int status = OGS_SBI_HTTP_STATUS_NO_CONTENT; + int r; amf_ue_t *amf_ue = NULL; @@ -905,8 +917,9 @@ int amf_namf_callback_handle_sdm_data_change_notify( ngapbuf = ngap_build_ue_context_modification_request(amf_ue); ogs_assert(ngapbuf); - if (nas_5gs_send_to_gnb(amf_ue, ngapbuf) != OGS_OK) - ogs_error("nas_5gs_send_to_gnb() failed"); + r = nas_5gs_send_to_gnb(amf_ue, ngapbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } cleanup: diff --git a/src/amf/nas-path.c b/src/amf/nas-path.c index 3c492feeb..b667a17d3 100644 --- a/src/amf/nas-path.c +++ b/src/amf/nas-path.c @@ -24,16 +24,20 @@ int nas_5gs_send_to_gnb(amf_ue_t *amf_ue, ogs_pkbuf_t *pkbuf) { + int rv; ogs_assert(pkbuf); amf_ue = amf_ue_cycle(amf_ue); if (!amf_ue) { - ogs_warn("UE(amf-ue) context has already been removed"); + ogs_error("UE(amf-ue) context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } - return ngap_send_to_ran_ue(amf_ue->ran_ue, pkbuf); + rv = ngap_send_to_ran_ue(amf_ue->ran_ue, pkbuf); + ogs_expect(rv == OGS_OK); + + return rv; } int nas_5gs_send_to_downlink_nas_transport(amf_ue_t *amf_ue, ogs_pkbuf_t *pkbuf) @@ -46,21 +50,24 @@ int nas_5gs_send_to_downlink_nas_transport(amf_ue_t *amf_ue, ogs_pkbuf_t *pkbuf) amf_ue = amf_ue_cycle(amf_ue); if (!amf_ue) { - ogs_warn("UE(amf-ue) context has already been removed"); + ogs_error("UE(amf-ue) context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ran_ue = ran_ue_cycle(amf_ue->ran_ue); if (!ran_ue) { - ogs_warn("NG context has already been removed"); + ogs_error("NG context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ngapbuf = ngap_build_downlink_nas_transport( ran_ue, pkbuf, false, false); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_downlink_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -80,26 +87,37 @@ int nas_5gs_send_registration_accept(amf_ue_t *amf_ue) ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); + if (!ran_ue) { + ogs_error("NG context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] Registration accept", amf_ue->supi); if (amf_ue->next.m_tmsi) { if (amf_ue->t3550.pkbuf) { gmmbuf = amf_ue->t3550.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } else { gmmbuf = gmm_build_registration_accept(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_accept() failed"); + return OGS_ERROR; + } } amf_ue->t3550.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3550.pkbuf, OGS_ERROR); + if (!amf_ue->t3550.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3550.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3550.timer, amf_timer_cfg(AMF_TIMER_T3550)->duration); } else { gmmbuf = gmm_build_registration_accept(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_accept() failed"); + return OGS_ERROR; + } } /* @@ -125,31 +143,41 @@ int nas_5gs_send_registration_accept(amf_ue_t *amf_ue) if (ran_ue->initial_context_setup_request_sent == false && (ran_ue->ue_context_requested == true || transfer_needed == true)) { ngapbuf = ngap_ue_build_initial_context_setup_request(amf_ue, gmmbuf); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_ue_build_initial_context_setup_request() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); ran_ue->initial_context_setup_request_sent = true; } else { if (transfer_needed == true) { ngapbuf = ngap_ue_build_pdu_session_resource_setup_request( amf_ue, gmmbuf); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_ue_build_pdu_session_resource_setup_request()" + " failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); } else { ngapbuf = ngap_build_downlink_nas_transport( ran_ue, gmmbuf, true, true); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_downlink_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); } } - return OGS_OK; + return rv; } int nas_5gs_send_registration_reject( @@ -165,7 +193,10 @@ int nas_5gs_send_registration_reject( ogs_warn("[%s] Registration reject [%d]", amf_ue->suci, gmm_cause); gmmbuf = gmm_build_registration_reject(gmm_cause); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_reject() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); ogs_expect(rv == OGS_OK); @@ -184,12 +215,18 @@ int nas_5gs_send_service_accept(amf_ue_t *amf_ue) ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); + if (!ran_ue) { + ogs_error("NG context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] Service accept", amf_ue->supi); gmmbuf = gmm_build_service_accept(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_reject() failed"); + return OGS_ERROR; + } /* * Previously, AMF would sends PDUSessionResourceSetupRequest @@ -214,27 +251,34 @@ int nas_5gs_send_service_accept(amf_ue_t *amf_ue) if (ran_ue->initial_context_setup_request_sent == false && (ran_ue->ue_context_requested == true || transfer_needed == true)) { ngapbuf = ngap_ue_build_initial_context_setup_request(amf_ue, gmmbuf); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_ue_build_initial_context_setup_request() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); ran_ue->initial_context_setup_request_sent = true; } else { if (transfer_needed == true) { ngapbuf = ngap_ue_build_pdu_session_resource_setup_request( amf_ue, gmmbuf); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_ue_build_pdu_session_resource_setup_request()" + " failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); } else { rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); } } - return OGS_OK; + return rv; } int nas_5gs_send_service_reject( @@ -248,7 +292,10 @@ int nas_5gs_send_service_reject( ogs_debug("[%s] Service reject", amf_ue->supi); gmmbuf = gmm_build_service_reject(amf_ue, gmm_cause); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_reject() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); ogs_expect(rv == OGS_OK); @@ -265,7 +312,10 @@ int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue) ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); + if (!ran_ue) { + ogs_error("NG context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] De-registration accept", amf_ue->supi); @@ -273,10 +323,16 @@ int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue) int rv; gmmbuf = gmm_build_de_registration_accept(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_registration_reject() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("nas_5gs_send_to_downlink_nas_transport() failed"); + return rv; + } } rv = ngap_send_ran_ue_context_release_command(ran_ue, @@ -297,25 +353,33 @@ int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue, ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); + if (!ran_ue) { + ogs_error("NG context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] De-registration request", amf_ue->supi); if (amf_ue->t3522.pkbuf) { gmmbuf = amf_ue->t3522.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } else { gmmbuf = gmm_build_de_registration_request(amf_ue, dereg_reason); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_de_registration_request() failed"); + return OGS_ERROR; + } } amf_ue->t3522.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3522.pkbuf, OGS_ERROR); + if (!amf_ue->t3522.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3522.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3522.timer, amf_timer_cfg(AMF_TIMER_T3522)->duration); rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); return rv; } @@ -331,14 +395,19 @@ int nas_5gs_send_identity_request(amf_ue_t *amf_ue) if (amf_ue->t3570.pkbuf) { gmmbuf = amf_ue->t3570.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } else { gmmbuf = gmm_build_identity_request(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_identity_request() failed"); + return OGS_ERROR; + } } amf_ue->t3570.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3570.pkbuf, OGS_ERROR); + if (!amf_ue->t3570.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3570.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3570.timer, amf_timer_cfg(AMF_TIMER_T3570)->duration); @@ -359,14 +428,19 @@ int nas_5gs_send_authentication_request(amf_ue_t *amf_ue) if (amf_ue->t3560.pkbuf) { gmmbuf = amf_ue->t3560.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } else { gmmbuf = gmm_build_authentication_request(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_authentication_request() failed"); + return OGS_ERROR; + } } amf_ue->t3560.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3560.pkbuf, OGS_ERROR); + if (!amf_ue->t3560.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3560.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3560.timer, amf_timer_cfg(AMF_TIMER_T3560)->duration); @@ -388,7 +462,10 @@ int nas_5gs_send_authentication_reject(amf_ue_t *amf_ue) ogs_warn("[%s] Authentication reject", amf_ue->suci); gmmbuf = gmm_build_authentication_reject(); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_authentication_reject() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); ogs_expect(rv == OGS_OK); @@ -407,14 +484,19 @@ int nas_5gs_send_security_mode_command(amf_ue_t *amf_ue) if (amf_ue->t3560.pkbuf) { gmmbuf = amf_ue->t3560.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } else { gmmbuf = gmm_build_security_mode_command(amf_ue); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_security_mode_command() failed"); + return OGS_ERROR; + } } amf_ue->t3560.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3560.pkbuf, OGS_ERROR); + if (!amf_ue->t3560.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3560.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3560.timer, amf_timer_cfg(AMF_TIMER_T3560)->duration); @@ -436,21 +518,32 @@ int nas_5gs_send_configuration_update_command( if (amf_ue->t3555.pkbuf) { gmmbuf = amf_ue->t3555.pkbuf; - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3555.pkbuf, OGS_ERROR); + if (!amf_ue->t3555.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3555.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3555.timer, amf_timer_cfg(AMF_TIMER_T3555)->duration); } else { - ogs_expect_or_return_val(param, OGS_ERROR); + if (!param) { + ogs_error("No param"); + return OGS_ERROR; + } gmmbuf = gmm_build_configuration_update_command(amf_ue, param); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_configuration_update_command() failed"); + return OGS_ERROR; + } if (param->acknowledgement_requested) { amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf); - ogs_expect_or_return_val(amf_ue->t3555.pkbuf, OGS_ERROR); + if (!amf_ue->t3555.pkbuf) { + ogs_error("ogs_pkbuf_copy(amf_ue->t3555.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(amf_ue->t3555.timer, amf_timer_cfg(AMF_TIMER_T3555)->duration); } @@ -476,17 +569,17 @@ int nas_send_pdu_session_setup_request(amf_sess_t *sess, ogs_assert(sess); amf_ue = amf_ue_cycle(sess->amf_ue); if (!amf_ue) { - ogs_warn("UE(amf-ue) context has already been removed"); + ogs_error("UE(amf-ue) context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ran_ue = ran_ue_cycle(amf_ue->ran_ue); if (!ran_ue) { ogs_warn("NG context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } if (n1smbuf) { @@ -508,10 +601,7 @@ int nas_send_pdu_session_setup_request(amf_sess_t *sess, } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - if (rv != OGS_OK) { - ogs_error("nas_5gs_send_to_gnb() failed"); - return OGS_ERROR; - } + ogs_expect(rv == OGS_OK); ran_ue->initial_context_setup_request_sent = true; } else { @@ -523,10 +613,7 @@ int nas_send_pdu_session_setup_request(amf_sess_t *sess, } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); - if (rv != OGS_OK) { - ogs_error("nas_5gs_send_to_gnb() failed"); - return OGS_ERROR; - } + ogs_expect(rv == OGS_OK); } return rv; @@ -546,17 +633,17 @@ int nas_send_pdu_session_modification_command(amf_sess_t *sess, ogs_assert(sess); amf_ue = amf_ue_cycle(sess->amf_ue); if (!amf_ue) { - ogs_warn("UE(amf-ue) context has already been removed"); + ogs_error("UE(amf-ue) context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ran_ue = ran_ue_cycle(amf_ue->ran_ue); if (!ran_ue) { ogs_warn("NG context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } if (n1smbuf) { @@ -607,17 +694,17 @@ int nas_send_pdu_session_release_command(amf_sess_t *sess, ogs_assert(sess); amf_ue = amf_ue_cycle(sess->amf_ue); if (!amf_ue) { - ogs_warn("UE(amf-ue) context has already been removed"); + ogs_error("UE(amf-ue) context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ran_ue = ran_ue_cycle(amf_ue->ran_ue); if (!ran_ue) { ogs_warn("NG context has already been removed"); if (n1smbuf) ogs_pkbuf_free(n1smbuf); ogs_pkbuf_free(n2smbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } if (n1smbuf) { @@ -689,7 +776,10 @@ int nas_5gs_send_gmm_status(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t cause) ogs_debug("[%s] 5GMM status", amf_ue->supi); gmmbuf = gmm_build_status(amf_ue, cause); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_status() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); ogs_expect(rv == OGS_OK); @@ -776,9 +866,12 @@ int nas_5gs_send_dl_nas_transport(amf_sess_t *sess, gmmbuf = gmm_build_dl_nas_transport(sess, payload_container_type, payload_container, cause, backoff_time); - ogs_expect_or_return_val(gmmbuf, OGS_ERROR); + if (!gmmbuf) { + ogs_error("gmm_build_dl_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_downlink_nas_transport(amf_ue, gmmbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + ogs_expect(rv == OGS_OK); return rv; } @@ -823,10 +916,13 @@ int nas_5gs_send_back_gsm_message( ogs_assert(sess->payload_container); pbuf = ogs_pkbuf_copy(sess->payload_container); - ogs_expect_or_return_val(pbuf, OGS_ERROR); + if (!pbuf) { + ogs_error("ogs_pkbuf_copy(pbuf) failed"); + return OGS_ERROR; + } - rv = nas_5gs_send_dl_nas_transport(sess, sess->payload_container_type, pbuf, - cause, backoff_time); + rv = nas_5gs_send_dl_nas_transport( + sess, sess->payload_container_type, pbuf, cause, backoff_time); ogs_expect(rv == OGS_OK); return rv; diff --git a/src/amf/nausf-handler.c b/src/amf/nausf-handler.c index 012a225b7..ef94768cd 100644 --- a/src/amf/nausf-handler.c +++ b/src/amf/nausf-handler.c @@ -23,6 +23,7 @@ int amf_nausf_auth_handle_authenticate( amf_ue_t *amf_ue, ogs_sbi_message_t *message) { + int r; OpenAPI_ue_authentication_ctx_t *UeAuthenticationCtx = NULL; OpenAPI_av5g_aka_t *AV5G_AKA = NULL; OpenAPI_links_value_schema_t *LinksValueSchemeValue = NULL; @@ -111,8 +112,9 @@ int amf_nausf_auth_handle_authenticate( amf_ue->nas.ue.ksi = amf_ue->nas.amf.ksi; - ogs_assert(OGS_OK == - nas_5gs_send_authentication_request(amf_ue)); + r = nas_5gs_send_authentication_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_OK; } diff --git a/src/amf/ngap-handler.c b/src/amf/ngap-handler.c index 69247ae3a..21deaf843 100644 --- a/src/amf/ngap-handler.c +++ b/src/amf/ngap-handler.c @@ -100,7 +100,7 @@ static bool maximum_number_of_gnbs_is_reached(void) void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i, j, k; + int i, j, k, r; NGAP_InitiatingMessage_t *initiatingMessage = NULL; NGAP_NGSetupRequest_t *NGSetupRequest = NULL; @@ -148,8 +148,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No GlobalRANNodeID"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -158,8 +159,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No globalGNB_ID"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -167,8 +169,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No SupportedTAList"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -191,8 +194,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No SupportedTAItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -216,8 +220,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No BroadcastPLMNItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -248,8 +253,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) ogs_error("No SliceSupportItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -285,8 +291,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) group = NGAP_Cause_PR_misc; cause = NGAP_CauseMisc_control_processing_overload; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -296,8 +303,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_message_not_compatible_with_receiver_state; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -307,8 +315,9 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) group = NGAP_Cause_PR_misc; cause = NGAP_CauseMisc_unknown_PLMN_or_SNPN; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -319,21 +328,23 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) group = NGAP_Cause_PR_radioNetwork; cause = NGAP_CauseRadioNetwork_slice_not_supported; - ogs_assert(OGS_OK == - ngap_send_ng_setup_failure(gnb, group, cause)); + r = ngap_send_ng_setup_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } amf_gnb_set_gnb_id(gnb, gnb_id); gnb->state.ng_setup_success = true; - ogs_assert(OGS_OK == - ngap_send_ng_setup_response(gnb)); + r = ngap_send_ng_setup_response(gnb); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) { - int i; + int i, r; char buf[OGS_ADDRSTRLEN]; ran_ue_t *ran_ue = NULL; @@ -389,9 +400,10 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) if (!RAN_UE_NGAP_ID) { ogs_error("No RAN_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -399,10 +411,11 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) if (!ran_ue) { ran_ue = ran_ue_add(gnb, *RAN_UE_NGAP_ID); if (ran_ue == NULL) { - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, + r = ngap_send_error_indication(gnb, NULL, NULL, NGAP_Cause_PR_misc, - NGAP_CauseMisc_control_processing_overload)); + NGAP_CauseMisc_control_processing_overload); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -456,10 +469,12 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) /* De-associate NG with NAS/EMM */ ran_ue_deassociate(amf_ue->ran_ue); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(amf_ue->ran_ue, + r = ngap_send_ran_ue_context_release_command( + amf_ue->ran_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } amf_ue_associate_ran_ue(amf_ue, ran_ue); @@ -480,9 +495,10 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) if (!UserLocationInformation) { ogs_error("No UserLocationInformation"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -490,17 +506,19 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) NGAP_UserLocationInformation_PR_userLocationInformationNR) { ogs_error("Not implemented UserLocationInformation[%d]", UserLocationInformation->present); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified)); + r = ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!NAS_PDU) { ogs_error("No NAS_PDU"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -523,14 +541,15 @@ void ngap_handle_initial_ue_message(amf_gnb_t *gnb, ogs_ngap_message_t *message) } } - ngap_send_to_nas(ran_ue, NGAP_ProcedureCode_id_InitialUEMessage, NAS_PDU); + ogs_expect(OGS_OK == ngap_send_to_nas( + ran_ue, NGAP_ProcedureCode_id_InitialUEMessage, NAS_PDU)); } void ngap_handle_uplink_nas_transport( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -582,18 +601,20 @@ void ngap_handle_uplink_nas_transport( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -601,11 +622,12 @@ void ngap_handle_uplink_nas_transport( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -613,19 +635,21 @@ void ngap_handle_uplink_nas_transport( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!UserLocationInformation) { ogs_error("No UserLocationInformation"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -633,18 +657,20 @@ void ngap_handle_uplink_nas_transport( NGAP_UserLocationInformation_PR_userLocationInformationNR) { ogs_error("Not implemented UserLocationInformation[%d]", UserLocationInformation->present); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified)); + r = ngap_send_error_indication(gnb, &ran_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!NAS_PDU) { ogs_error("No NAS_PDU"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -665,14 +691,15 @@ void ngap_handle_uplink_nas_transport( memcpy(&amf_ue->nr_tai, &ran_ue->saved.nr_tai, sizeof(ogs_5gs_tai_t)); memcpy(&amf_ue->nr_cgi, &ran_ue->saved.nr_cgi, sizeof(ogs_nr_cgi_t)); - ngap_send_to_nas(ran_ue, NGAP_ProcedureCode_id_UplinkNASTransport, NAS_PDU); + ogs_expect(OGS_OK == ngap_send_to_nas( + ran_ue, NGAP_ProcedureCode_id_UplinkNASTransport, NAS_PDU)); } void ngap_handle_ue_radio_capability_info_indication( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; ran_ue_t *ran_ue = NULL; uint64_t amf_ue_ngap_id; @@ -721,18 +748,20 @@ void ngap_handle_ue_radio_capability_info_indication( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -740,11 +769,12 @@ void ngap_handle_ue_radio_capability_info_indication( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -753,10 +783,11 @@ void ngap_handle_ue_radio_capability_info_indication( if (!UERadioCapability) { ogs_error("No UERadioCapability"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -769,7 +800,7 @@ void ngap_handle_initial_context_setup_response( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -822,18 +853,20 @@ void ngap_handle_initial_context_setup_response( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -841,11 +874,12 @@ void ngap_handle_initial_context_setup_response( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -856,11 +890,12 @@ void ngap_handle_initial_context_setup_response( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -870,27 +905,30 @@ void ngap_handle_initial_context_setup_response( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceSetupItemCxtRes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->pDUSessionResourceSetupResponseTransfer; if (!transfer) { ogs_error("No PDUSessionResourceSetupResponseTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -898,20 +936,22 @@ void ngap_handle_initial_context_setup_response( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -963,9 +1003,10 @@ void ngap_handle_initial_context_setup_response( switch (sess->gsm_message.type) { case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND: - ogs_expect(OGS_OK == - nas_send_pdu_session_modification_command(sess, - sess->gsm_message.n1buf, sess->gsm_message.n2buf)); + r = nas_send_pdu_session_modification_command(sess, + sess->gsm_message.n1buf, sess->gsm_message.n2buf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* n1buf is de-allocated * in gmm_build_dl_nas_transport() */ @@ -1012,8 +1053,9 @@ void ngap_handle_initial_context_setup_response( memset(¶m, 0, sizeof(param)); param.acknowledgement_requested = 1; param.guti = 1; - ogs_assert(OGS_OK == - nas_5gs_send_configuration_update_command(amf_ue, ¶m)); + r = nas_5gs_send_configuration_update_command(amf_ue, ¶m); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_PAGING_INFO(amf_ue); } @@ -1023,7 +1065,7 @@ void ngap_handle_initial_context_setup_failure( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i, old_xact_count = 0, new_xact_count = 0; + int i, r, old_xact_count = 0, new_xact_count = 0; ran_ue_t *ran_ue = NULL; amf_ue_t *amf_ue = NULL; @@ -1071,18 +1113,20 @@ void ngap_handle_initial_context_setup_failure( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1090,11 +1134,12 @@ void ngap_handle_initial_context_setup_failure( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1103,10 +1148,11 @@ void ngap_handle_initial_context_setup_failure( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } ogs_debug(" Cause[Group:%d Cause:%d]", @@ -1143,10 +1189,11 @@ void ngap_handle_initial_context_setup_failure( } if (old_xact_count == new_xact_count) { - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(ran_ue, + r = ngap_send_ran_ue_context_release_command(ran_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -1307,7 +1354,7 @@ void ngap_handle_ue_context_modification_failure( void ngap_handle_ue_context_release_request( amf_gnb_t *gnb, ogs_ngap_message_t *message) { - int i; + int i, r; char buf[OGS_ADDRSTRLEN]; uint64_t amf_ue_ngap_id; @@ -1362,18 +1409,20 @@ void ngap_handle_ue_context_release_request( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1381,11 +1430,12 @@ void ngap_handle_ue_context_release_request( if (!ran_ue) { ogs_warn("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1394,10 +1444,11 @@ void ngap_handle_ue_context_release_request( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1422,10 +1473,11 @@ void ngap_handle_ue_context_release_request( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(ran_ue, + r = ngap_send_ran_ue_context_release_command(ran_ue, Cause->present, (int)Cause->choice.radioNetwork, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { int xact_count = amf_sess_xact_count(amf_ue); @@ -1443,20 +1495,22 @@ void ngap_handle_ue_context_release_request( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceSetupItemSURes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1469,19 +1523,21 @@ void ngap_handle_ue_context_release_request( } } } - - if (amf_sess_xact_count(amf_ue) == xact_count) - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + + if (amf_sess_xact_count(amf_ue) == xact_count) { + r = ngap_send_amf_ue_context_release_command(amf_ue, Cause->present, (int)Cause->choice.radioNetwork, - NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0)); + NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } } } void ngap_handle_ue_context_release_complete( amf_gnb_t *gnb, ogs_ngap_message_t *message) { - int i; + int i, r; char buf[OGS_ADDRSTRLEN]; uint64_t amf_ue_ngap_id; @@ -1525,18 +1581,20 @@ void ngap_handle_ue_context_release_complete( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1544,11 +1602,12 @@ void ngap_handle_ue_context_release_complete( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1557,6 +1616,7 @@ void ngap_handle_ue_context_release_complete( void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue) { + int r; amf_ue_t *amf_ue = NULL; ogs_assert(ran_ue); @@ -1619,13 +1679,19 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue) case NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK: ogs_debug(" Action: NG normal release"); ran_ue_remove(ran_ue); - ogs_expect_or_return(amf_ue); + if (!amf_ue) { + ogs_error("No UE(amf-ue) Context"); + return; + } amf_ue_deassociate(amf_ue); break; case NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE: ogs_debug(" Action: UE context remove"); ran_ue_remove(ran_ue); - ogs_expect_or_return(amf_ue); + if (!amf_ue) { + ogs_error("No UE(amf-ue) context"); + return; + } amf_ue_remove(amf_ue); break; case NGAP_UE_CTX_REL_NG_HANDOVER_COMPLETE: @@ -1634,7 +1700,10 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue) source_ue_deassociate_target_ue(ran_ue); ran_ue_remove(ran_ue); - ogs_expect_or_return(amf_ue); + if (!amf_ue) { + ogs_error("No UE(amf-ue) context"); + return; + } break; case NGAP_UE_CTX_REL_NG_HANDOVER_CANCEL: ogs_warn(" Action: NG handover cancel"); @@ -1642,11 +1711,18 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue) source_ue_deassociate_target_ue(ran_ue); ran_ue_remove(ran_ue); - ogs_expect_or_return(amf_ue); - ogs_expect_or_return(amf_ue->ran_ue); + if (!amf_ue) { + ogs_error("No UE(amf-ue) context"); + return; + } + if (!amf_ue->ran_ue) { + ogs_error("No NG context"); + return; + } - ogs_assert(OGS_OK == - ngap_send_handover_cancel_ack(amf_ue->ran_ue)); + r = ngap_send_handover_cancel_ack(amf_ue->ran_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case NGAP_UE_CTX_REL_NG_HANDOVER_FAILURE: ogs_warn(" Action: NG handover failure"); @@ -1654,7 +1730,10 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue) source_ue_deassociate_target_ue(ran_ue); ran_ue_remove(ran_ue); - ogs_expect_or_return(amf_ue); + if (!amf_ue) { + ogs_error("No UE(amf-ue) context"); + return; + } break; default: ogs_error("Invalid Action[%d]", ran_ue->ue_ctx_rel_action); @@ -1666,7 +1745,7 @@ void ngap_handle_pdu_session_resource_setup_response( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -1727,18 +1806,20 @@ void ngap_handle_pdu_session_resource_setup_response( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1746,11 +1827,12 @@ void ngap_handle_pdu_session_resource_setup_response( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1761,11 +1843,12 @@ void ngap_handle_pdu_session_resource_setup_response( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1777,33 +1860,36 @@ void ngap_handle_pdu_session_resource_setup_response( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceSetupItemSURes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->pDUSessionResourceSetupResponseTransfer; if (!transfer) { ogs_error("No PDUSessionResourceSetupResponseTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1811,20 +1897,22 @@ void ngap_handle_pdu_session_resource_setup_response( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1856,11 +1944,12 @@ void ngap_handle_pdu_session_resource_setup_response( if (!PDUSessionFailedItem) { ogs_error("No PDUSessionResourceFailedToSetupItemSURes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1869,22 +1958,24 @@ void ngap_handle_pdu_session_resource_setup_response( pDUSessionResourceSetupUnsuccessfulTransfer; if (!transfer) { ogs_error("No PDUSessionResourceSetupUnsuccessfulTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionFailedItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1893,21 +1984,23 @@ void ngap_handle_pdu_session_resource_setup_response( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionFailedItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2( + r = ngap_send_error_indication2( amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionFailedItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1969,9 +2062,10 @@ void ngap_handle_pdu_session_resource_setup_response( } } else { ogs_error("No PDUSessionResourceList"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -1979,7 +2073,7 @@ void ngap_handle_pdu_session_resource_modify_response( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -2032,18 +2126,20 @@ void ngap_handle_pdu_session_resource_modify_response( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2051,11 +2147,12 @@ void ngap_handle_pdu_session_resource_modify_response( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2066,19 +2163,21 @@ void ngap_handle_pdu_session_resource_modify_response( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!PDUSessionList) { ogs_error("No PDUSessionResourceModifyListModRes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2089,27 +2188,30 @@ void ngap_handle_pdu_session_resource_modify_response( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceModifyItemModRes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->pDUSessionResourceModifyResponseTransfer; if (!transfer) { ogs_error("No PDUSessionResourceModifyResponseTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2117,20 +2219,22 @@ void ngap_handle_pdu_session_resource_modify_response( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2154,7 +2258,7 @@ void ngap_handle_pdu_session_resource_release_response( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -2208,18 +2312,20 @@ void ngap_handle_pdu_session_resource_release_response( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2227,11 +2333,12 @@ void ngap_handle_pdu_session_resource_release_response( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2242,19 +2349,21 @@ void ngap_handle_pdu_session_resource_release_response( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!PDUSessionList) { ogs_error("No PDUSessionResourceReleasedListRelRes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2265,27 +2374,30 @@ void ngap_handle_pdu_session_resource_release_response( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceReleasedItemRelRes"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->pDUSessionResourceReleaseResponseTransfer; if (!transfer) { ogs_error("No PDUSessionResourceReleaseResponseTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2293,20 +2405,22 @@ void ngap_handle_pdu_session_resource_release_response( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2330,7 +2444,7 @@ void ngap_handle_uplink_ran_configuration_transfer( amf_gnb_t *gnb, ogs_ngap_message_t *message, ogs_pkbuf_t *pkbuf) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; NGAP_InitiatingMessage_t *initiatingMessage = NULL; NGAP_UplinkRANConfigurationTransfer_t @@ -2385,18 +2499,20 @@ void ngap_handle_uplink_ran_configuration_transfer( NGAP_GlobalRANNodeID_PR_globalGNB_ID) { ogs_error("Not implemented targetGlobalRANNodeID->present[%d]", targetGlobalRANNodeID->present); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } targetGlobalGNB_ID = targetGlobalRANNodeID->choice.globalGNB_ID; if (!targetGlobalGNB_ID) { ogs_error("No targetGlobalGNB_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2410,18 +2526,20 @@ void ngap_handle_uplink_ran_configuration_transfer( NGAP_GlobalRANNodeID_PR_globalGNB_ID) { ogs_error("Not implemented sourceGlobalRANNodeID->present[%d]", sourceGlobalRANNodeID->present); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } sourceGlobalGNB_ID = sourceGlobalRANNodeID->choice.globalGNB_ID; if (!sourceGlobalGNB_ID) { ogs_error("No sourceGlobalGNB_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2437,15 +2555,17 @@ void ngap_handle_uplink_ran_configuration_transfer( if (!target_gnb) { ogs_error("Uplink RAN configuration transfer : " "cannot find target gNB-id[0x%x]", target_gnb_id); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } - ogs_assert(OGS_OK == - ngap_send_downlink_ran_configuration_transfer( - target_gnb, SONConfigurationTransfer)); + r = ngap_send_downlink_ran_configuration_transfer( + target_gnb, SONConfigurationTransfer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -2453,7 +2573,7 @@ void ngap_handle_path_switch_request( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -2525,26 +2645,29 @@ void ngap_handle_path_switch_request( if (!RAN_UE_NGAP_ID) { ogs_error("No RAN_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2552,11 +2675,12 @@ void ngap_handle_path_switch_request( if (!ran_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2564,11 +2688,12 @@ void ngap_handle_path_switch_request( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2585,9 +2710,10 @@ void ngap_handle_path_switch_request( if (!UserLocationInformation) { ogs_error("No UserLocationInformation"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2595,33 +2721,37 @@ void ngap_handle_path_switch_request( NGAP_UserLocationInformation_PR_userLocationInformationNR) { ogs_error("Not implemented UserLocationInformation[%d]", UserLocationInformation->present); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!UESecurityCapabilities) { ogs_error("No UESecurityCapabilities"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!PDUSessionResourceToBeSwitchedDLList) { ogs_error("No PDUSessionResourceToBeSwitchedDLList"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SECURITY_CONTEXT_IS_VALID(amf_ue)) { ogs_error("No Security Context"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_nas, NGAP_CauseNas_authentication_failure)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_nas, NGAP_CauseNas_authentication_failure); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2688,27 +2818,30 @@ void ngap_handle_path_switch_request( if (!PDUSessionItem) { ogs_error("No NGAP_PDUSessionResourceToBeSwitchedDLItem"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->pathSwitchRequestTransfer; if (!transfer) { ogs_error("No PDUSessionResourceSetupResponseTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2716,20 +2849,22 @@ void ngap_handle_path_switch_request( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2753,7 +2888,7 @@ void ngap_handle_handover_required( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *source_ue = NULL, *target_ue = NULL; @@ -2829,18 +2964,20 @@ void ngap_handle_handover_required( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2848,11 +2985,12 @@ void ngap_handle_handover_required( if (!source_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2863,51 +3001,57 @@ void ngap_handle_handover_required( if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!HandoverType) { ogs_error("No HandoverType"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!TargetID) { ogs_error("No TargetID"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (TargetID->present != NGAP_TargetID_PR_targetRANNodeID) { ogs_error("Not implemented TargetID[%d]", TargetID->present); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } targetRANNodeID = TargetID->choice.targetRANNodeID; if (!targetRANNodeID) { ogs_error("No targetRANNodeID"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2915,18 +3059,20 @@ void ngap_handle_handover_required( if (globalRANNodeID->present != NGAP_GlobalRANNodeID_PR_globalGNB_ID) { ogs_error("Not implemented globalRANNodeID[%d]", globalRANNodeID->present); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } globalGNB_ID = globalRANNodeID->choice.globalGNB_ID; if (!globalGNB_ID) { ogs_error("No globalGNB_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2935,42 +3081,47 @@ void ngap_handle_handover_required( if (!target_gnb) { ogs_error("Handover required : cannot find target gNB-id[0x%x]", target_gnb_id); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!PDUSessionList) { ogs_error("No PDUSessionList"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SourceToTarget_TransparentContainer) { ogs_error("No SourceToTarget_TransparentContainer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SECURITY_CONTEXT_IS_VALID(amf_ue)) { ogs_error("No Security Context"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_nas, NGAP_CauseNas_authentication_failure)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_nas, NGAP_CauseNas_authentication_failure); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } /* Target UE */ target_ue = ran_ue_add(target_gnb, INVALID_UE_NGAP_ID); if (target_ue == NULL) { - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_misc, - NGAP_CauseMisc_control_processing_overload)); + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_misc, + NGAP_CauseMisc_control_processing_overload); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3007,27 +3158,30 @@ void ngap_handle_handover_required( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceItemHORqd"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->handoverRequiredTransfer; if (!transfer) { ogs_error("No handoverRequiredTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3035,20 +3189,22 @@ void ngap_handle_handover_required( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3075,7 +3231,7 @@ void ngap_handle_handover_request_ack( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *source_ue = NULL, *target_ue = NULL; @@ -3133,26 +3289,29 @@ void ngap_handle_handover_request_ack( if (!RAN_UE_NGAP_ID) { ogs_error("No RAN_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3160,19 +3319,21 @@ void ngap_handle_handover_request_ack( if (!target_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!RAN_UE_NGAP_ID) { ogs_error("No RAN_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3182,22 +3343,24 @@ void ngap_handle_handover_request_ack( if (!source_ue) { ogs_error("Cannot find Source-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } amf_ue = target_ue->amf_ue; if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3208,17 +3371,19 @@ void ngap_handle_handover_request_ack( if (!PDUSessionList) { ogs_error("No PDUSessionList"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!TargetToSource_TransparentContainer) { ogs_error("No TargetToSource_TransparentContainer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3233,27 +3398,30 @@ void ngap_handle_handover_request_ack( if (!PDUSessionItem) { ogs_error("No PDUSessionResourceAdmittedItem"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } transfer = &PDUSessionItem->handoverRequestAcknowledgeTransfer; if (!transfer) { ogs_error("No handoverRequestAcknowledgeTransfer"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (PDUSessionItem->pDUSessionID == OGS_NAS_PDU_SESSION_IDENTITY_UNASSIGNED) { ogs_error("PDU Session Identity is unassigned"); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3261,20 +3429,22 @@ void ngap_handle_handover_request_ack( if (!sess) { ogs_error("Cannot find PDU Session ID [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!SESSION_CONTEXT_IN_SMF(sess)) { ogs_error("Session Context is not in SMF [%d]", (int)PDUSessionItem->pDUSessionID); - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_PDU_session_ID)); + NGAP_CauseRadioNetwork_unknown_PDU_session_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3300,7 +3470,7 @@ void ngap_handle_handover_failure( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; ran_ue_t *source_ue = NULL, *target_ue = NULL; uint64_t amf_ue_ngap_id; @@ -3343,18 +3513,20 @@ void ngap_handle_handover_failure( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3362,11 +3534,12 @@ void ngap_handle_handover_failure( if (!target_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, NULL, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3374,11 +3547,12 @@ void ngap_handle_handover_failure( if (!source_ue) { ogs_error("Cannot find Source-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3389,29 +3563,32 @@ void ngap_handle_handover_failure( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } ogs_debug(" Cause[Group:%d Cause:%d]", Cause->present, (int)Cause->choice.radioNetwork); - ogs_assert(OGS_OK == - ngap_send_handover_preparation_failure(source_ue, Cause)); + r = ngap_send_handover_preparation_failure(source_ue, Cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(target_ue, + r = ngap_send_ran_ue_context_release_command(target_ue, NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_ho_failure_in_target_5GC_ngran_node_or_target_system, - NGAP_UE_CTX_REL_NG_HANDOVER_FAILURE, 0)); + NGAP_UE_CTX_REL_NG_HANDOVER_FAILURE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void ngap_handle_handover_cancel( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -3460,18 +3637,20 @@ void ngap_handle_handover_cancel( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3479,11 +3658,12 @@ void ngap_handle_handover_cancel( if (!source_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3491,22 +3671,24 @@ void ngap_handle_handover_cancel( if (!target_ue) { ogs_error("Cannot find Source-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } amf_ue = source_ue->amf_ue; if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3517,10 +3699,11 @@ void ngap_handle_handover_cancel( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } ogs_debug(" Cause[Group:%d Cause:%d]", @@ -3544,7 +3727,7 @@ void ngap_handle_uplink_ran_status_transfer( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; ran_ue_t *source_ue = NULL, *target_ue = NULL; @@ -3594,18 +3777,20 @@ void ngap_handle_uplink_ran_status_transfer( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3613,11 +3798,12 @@ void ngap_handle_uplink_ran_status_transfer( if (!source_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3625,22 +3811,24 @@ void ngap_handle_uplink_ran_status_transfer( if (!target_ue) { ogs_error("Cannot find Source-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } amf_ue = source_ue->amf_ue; if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &source_ue->ran_ue_ngap_id, &source_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3649,16 +3837,17 @@ void ngap_handle_uplink_ran_status_transfer( ogs_debug(" Target : RAN_UE_NGAP_ID[%d] AMF_UE_NGAP_ID[%lld] ", target_ue->ran_ue_ngap_id, (long long)target_ue->amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_downlink_ran_status_transfer( - target_ue, RANStatusTransfer_TransparentContainer)); + r = ngap_send_downlink_ran_status_transfer( + target_ue, RANStatusTransfer_TransparentContainer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void ngap_handle_handover_notification( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; amf_ue_t *amf_ue = NULL; amf_sess_t *sess = NULL; @@ -3708,18 +3897,20 @@ void ngap_handle_handover_notification( if (!AMF_UE_NGAP_ID) { ogs_error("No AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (asn_INTEGER2ulong(AMF_UE_NGAP_ID, (unsigned long *)&amf_ue_ngap_id) != 0) { ogs_error("Invalid AMF_UE_NGAP_ID"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, (uint32_t *)RAN_UE_NGAP_ID, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3727,11 +3918,12 @@ void ngap_handle_handover_notification( if (!target_ue) { ogs_error("No RAN UE Context : AMF_UE_NGAP_ID[%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, (uint32_t *)RAN_UE_NGAP_ID, &amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3739,22 +3931,24 @@ void ngap_handle_handover_notification( if (!source_ue) { ogs_error("Cannot find Source-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } amf_ue = target_ue->amf_ue; if (!amf_ue) { ogs_error("Cannot find AMF-UE Context [%lld]", (long long)amf_ue_ngap_id); - ogs_assert(OGS_OK == - ngap_send_error_indication( + r = ngap_send_error_indication( gnb, &target_ue->ran_ue_ngap_id, &target_ue->amf_ue_ngap_id, NGAP_Cause_PR_radioNetwork, - NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID)); + NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3762,9 +3956,10 @@ void ngap_handle_handover_notification( if (!UserLocationInformation) { ogs_error("No UserLocationInformation"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &target_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, &target_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3772,9 +3967,10 @@ void ngap_handle_handover_notification( NGAP_UserLocationInformation_PR_userLocationInformationNR) { ogs_error("Not implemented UserLocationInformation[%d]", UserLocationInformation->present); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, &target_ue->ran_ue_ngap_id, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified)); + r = ngap_send_error_indication(gnb, &target_ue->ran_ue_ngap_id, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_unspecified); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3802,12 +3998,13 @@ void ngap_handle_handover_notification( memcpy(&amf_ue->nr_tai, &target_ue->saved.nr_tai, sizeof(ogs_5gs_tai_t)); memcpy(&amf_ue->nr_cgi, &target_ue->saved.nr_cgi, sizeof(ogs_nr_cgi_t)); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(source_ue, + r = ngap_send_ran_ue_context_release_command(source_ue, NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_successful_handover, NGAP_UE_CTX_REL_NG_HANDOVER_COMPLETE, - ogs_app()->time.handover.duration)); + ogs_app()->time.handover.duration); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_list_for_each(&amf_ue->sess_list, sess) { memset(¶m, 0, sizeof(param)); @@ -3825,7 +4022,7 @@ void ngap_handle_ran_configuration_update( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i, j, k; + int i, j, k, r; NGAP_InitiatingMessage_t *initiatingMessage = NULL; NGAP_RANConfigurationUpdate_t *RANConfigurationUpdate = NULL; @@ -3875,8 +4072,9 @@ void ngap_handle_ran_configuration_update( ogs_error("No globalGNB_ID"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure(gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3901,9 +4099,10 @@ void ngap_handle_ran_configuration_update( ogs_error("No SupportedTAItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure( - gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure( + gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3927,9 +4126,10 @@ void ngap_handle_ran_configuration_update( ogs_error("No BroadcastPLMNItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure( - gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure( + gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3960,9 +4160,10 @@ void ngap_handle_ran_configuration_update( ogs_error("No SliceSupportItem"); group = NGAP_Cause_PR_protocol; cause = NGAP_CauseProtocol_semantic_error; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure( - gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure( + gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -4001,8 +4202,9 @@ void ngap_handle_ran_configuration_update( cause = NGAP_CauseProtocol_message_not_compatible_with_receiver_state; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure(gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -4013,8 +4215,9 @@ void ngap_handle_ran_configuration_update( group = NGAP_Cause_PR_misc; cause = NGAP_CauseMisc_unknown_PLMN_or_SNPN; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure(gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -4025,8 +4228,9 @@ void ngap_handle_ran_configuration_update( group = NGAP_Cause_PR_radioNetwork; cause = NGAP_CauseRadioNetwork_slice_not_supported; - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_failure(gnb, group, cause)); + r = ngap_send_ran_configuration_update_failure(gnb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } } @@ -4034,15 +4238,14 @@ void ngap_handle_ran_configuration_update( if (PagingDRX) ogs_debug(" PagingDRX[%ld]", *PagingDRX); - ogs_assert(OGS_OK == - ngap_send_ran_configuration_update_ack(gnb)); + ogs_expect(OGS_OK == ngap_send_ran_configuration_update_ack(gnb)); } void ngap_handle_ng_reset( amf_gnb_t *gnb, ogs_ngap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i, old_xact_count = 0, new_xact_count = 0; + int i, r, old_xact_count = 0, new_xact_count = 0; NGAP_InitiatingMessage_t *initiatingMessage = NULL; NGAP_NGReset_t *NGReset = NULL; @@ -4084,9 +4287,10 @@ void ngap_handle_ng_reset( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -4095,9 +4299,10 @@ void ngap_handle_ng_reset( if (!ResetType) { ogs_error("No ResetType"); - ogs_assert(OGS_OK == - ngap_send_error_indication(gnb, NULL, NULL, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication(gnb, NULL, NULL, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -4137,9 +4342,11 @@ void ngap_handle_ng_reset( * for new UE-associated logical NG-connections over the NG interface, * the AMF shall respond with the NG RESET ACKNOWLEDGE message. */ - if (ogs_list_count(&gnb->ran_ue_list) == 0) - ogs_assert(OGS_OK == - ngap_send_ng_reset_ack(gnb, NULL)); + if (ogs_list_count(&gnb->ran_ue_list) == 0) { + r = ngap_send_ng_reset_ack(gnb, NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } break; @@ -4153,7 +4360,10 @@ void ngap_handle_ng_reset( ogs_pkbuf_free(gnb->ng_reset_ack); gnb->ng_reset_ack = ogs_ngap_build_ng_reset_ack(partOfNG_Interface); - ogs_expect_or_return(gnb->ng_reset_ack); + if (!gnb->ng_reset_ack) { + ogs_error("ogs_ngap_build_ng_reset_ack() failed"); + return; + } for (i = 0; i < partOfNG_Interface->list.count; i++) { NGAP_UE_associatedLogicalNG_connectionItem_t *item = NULL; @@ -4246,8 +4456,9 @@ void ngap_handle_ng_reset( * where PartOfNG_interface was requested * REMOVED */ ogs_assert(gnb->ng_reset_ack); - ogs_expect(OGS_OK == - ngap_send_to_gnb(gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING)); + r = ngap_send_to_gnb(gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* Clear NG-Reset Ack Buffer */ gnb->ng_reset_ack = NULL; diff --git a/src/amf/ngap-path.c b/src/amf/ngap-path.c index 44fee8ec0..5f8c3898a 100644 --- a/src/amf/ngap-path.c +++ b/src/amf/ngap-path.c @@ -54,16 +54,16 @@ int ngap_send_to_gnb(amf_gnb_t *gnb, ogs_pkbuf_t *pkbuf, uint16_t stream_no) gnb = amf_gnb_cycle(gnb); if (!gnb) { - ogs_warn("gNB has already been removed"); + ogs_error("gNB has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ogs_assert(gnb->sctp.sock); if (gnb->sctp.sock->fd == INVALID_SOCKET) { - ogs_fatal("gNB SCTP socket has already been destroyed"); + ogs_error("gNB SCTP socket has already been destroyed"); ogs_log_hexdump(OGS_LOG_FATAL, pkbuf->data, pkbuf->len); - ogs_assert_if_reached(); + ogs_pkbuf_free(pkbuf); return OGS_ERROR; } @@ -83,16 +83,20 @@ int ngap_send_to_gnb(amf_gnb_t *gnb, ogs_pkbuf_t *pkbuf, uint16_t stream_no) int ngap_send_to_ran_ue(ran_ue_t *ran_ue, ogs_pkbuf_t *pkbuf) { + int rv; ogs_assert(pkbuf); ran_ue = ran_ue_cycle(ran_ue); if (!ran_ue) { - ogs_warn("NG context has already been removed"); + ogs_error("NG context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } - return ngap_send_to_gnb(ran_ue->gnb, pkbuf, ran_ue->gnb_ostream_id); + rv = ngap_send_to_gnb(ran_ue->gnb, pkbuf, ran_ue->gnb_ostream_id); + ogs_expect(rv == OGS_OK); + + return rv; } int ngap_delayed_send_to_ran_ue( @@ -117,10 +121,10 @@ int ngap_delayed_send_to_ran_ue( return OGS_OK; } else { - amf_gnb_t *gnb = NULL; - gnb = ran_ue->gnb; - ogs_assert(gnb); - return ngap_send_to_ran_ue(ran_ue, pkbuf); + int rv = ngap_send_to_ran_ue(ran_ue, pkbuf); + ogs_expect(rv == OGS_OK); + + return rv; } } @@ -149,6 +153,8 @@ int ngap_send_to_5gsm(amf_ue_t *amf_ue, ogs_pkbuf_t *esmbuf) int ngap_send_to_nas(ran_ue_t *ran_ue, NGAP_ProcedureCode_t procedureCode, NGAP_NAS_PDU_t *nasPdu) { + int rv; + ogs_nas_5gs_security_header_t *sh = NULL; ogs_nas_security_header_type_t security_header_type; @@ -211,7 +217,6 @@ int ngap_send_to_nas(ran_ue_t *ran_ue, ogs_assert(h); if (h->extended_protocol_discriminator == OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM) { - int rv; e = amf_event_new(AMF_EVENT_5GMM_MESSAGE); if (!e) { ogs_error("ngap_send_to_nas() failed"); @@ -237,7 +242,10 @@ int ngap_send_to_nas(ran_ue_t *ran_ue, ogs_pkbuf_free(nasbuf); return OGS_ERROR; } - return ngap_send_to_5gsm(amf_ue, nasbuf); + rv = ngap_send_to_5gsm(amf_ue, nasbuf); + ogs_expect(rv == OGS_OK); + + return rv; } else { ogs_error("Unknown NAS Protocol discriminator 0x%02x", h->extended_protocol_discriminator); @@ -253,7 +261,10 @@ int ngap_send_ng_setup_response(amf_gnb_t *gnb) ogs_debug("NG-Setup response"); ngap_buffer = ngap_build_ng_setup_response(); - ogs_expect_or_return_val(ngap_buffer, OGS_ERROR); + if (!ngap_buffer) { + ogs_error("ngap_build_ng_setup_response() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngap_buffer, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -270,7 +281,10 @@ int ngap_send_ng_setup_failure( ogs_debug("NG-Setup failure"); ngap_buffer = ngap_build_ng_setup_failure( group, cause, NGAP_TimeToWait_v10s); - ogs_expect_or_return_val(ngap_buffer, OGS_ERROR); + if (!ngap_buffer) { + ogs_error("ngap_build_ng_setup_failure() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngap_buffer, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -285,7 +299,10 @@ int ngap_send_ran_configuration_update_ack(amf_gnb_t *gnb) ogs_debug("RANConfigurationUpdateAcknowledge"); ngap_buffer = ngap_build_ran_configuration_update_ack(); - ogs_expect_or_return_val(ngap_buffer, OGS_ERROR); + if (!ngap_buffer) { + ogs_error("ngap_build_ran_configuration_update_ack() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngap_buffer, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -302,7 +319,10 @@ int ngap_send_ran_configuration_update_failure( ogs_debug("RANConfigurationUpdateFailure"); ngap_buffer = ngap_build_ran_configuration_update_failure( group, cause, NGAP_TimeToWait_v10s); - ogs_expect_or_return_val(ngap_buffer, OGS_ERROR); + if (!ngap_buffer) { + ogs_error("ngap_build_ran_configuration_update_failure() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngap_buffer, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -330,7 +350,10 @@ int ngap_send_ran_ue_context_release_command( group, (int)cause, action, (int)duration); ngapbuf = ngap_build_ue_context_release_command(ran_ue, group, cause); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_ue_context_release_command() failed"); + return OGS_ERROR; + } rv = ngap_delayed_send_to_ran_ue(ran_ue, ngapbuf, duration); ogs_expect(rv == OGS_OK); @@ -345,21 +368,15 @@ int ngap_send_amf_ue_context_release_command( amf_ue_t *amf_ue, NGAP_Cause_PR group, long cause, uint8_t action, ogs_time_t duration) { + int rv; ogs_assert(amf_ue); - ran_ue_t *ran_ue = ran_ue_cycle(amf_ue->ran_ue); - if (ran_ue) { - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(ran_ue, - group, cause, action, duration)); - ogs_debug(" SUPI[%s]", amf_ue->supi); - } else { - ogs_error("[%s] No NG Context - " - "Group[%d] Cause[%d] Action[%d] Duration[%d]", - amf_ue->supi, group, (int)cause, action, (int)duration); - } + rv = ngap_send_ran_ue_context_release_command( + amf_ue->ran_ue, group, cause, action, duration); + ogs_expect(rv == OGS_OK); + ogs_debug(" SUPI[%s]", amf_ue->supi); - return OGS_OK; + return rv; } int ngap_send_paging(amf_ue_t *amf_ue) @@ -383,14 +400,23 @@ int ngap_send_paging(amf_ue_t *amf_ue) ngapbuf = amf_ue->t3513.pkbuf; } else { ngapbuf = ngap_build_paging(amf_ue); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_paging() failed"); + return OGS_ERROR; + } } amf_ue->t3513.pkbuf = ogs_pkbuf_copy(ngapbuf); - ogs_expect_or_return_val(amf_ue->t3513.pkbuf, OGS_ERROR); + if (!amf_ue->t3513.pkbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngapbuf, NGAP_NON_UE_SIGNALLING); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("ngap_send_to_gnb() failed"); + return rv; + } } } } @@ -413,7 +439,10 @@ int ngap_send_downlink_ran_configuration_transfer( ogs_assert(transfer); ngapbuf = ngap_build_downlink_ran_configuration_transfer(transfer); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_downlink_ran_configuration_transfer() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(target_gnb, ngapbuf, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -433,7 +462,10 @@ int ngap_send_path_switch_ack(amf_sess_t *sess) ogs_assert(amf_ue); ngapbuf = ngap_build_path_switch_ack(amf_ue); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_path_switch_ack() failed"); + return OGS_ERROR; + } rv = nas_5gs_send_to_gnb(amf_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -456,7 +488,10 @@ int ngap_send_handover_request(amf_ue_t *amf_ue) ogs_assert(target_ue); ngapbuf = ngap_build_handover_request(target_ue); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_handover_request() failed"); + return OGS_ERROR; + } rv = ngap_send_to_ran_ue(target_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -474,7 +509,10 @@ int ngap_send_handover_preparation_failure( ogs_assert(cause); ngapbuf = ngap_build_handover_preparation_failure(source_ue, cause); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_handover_preparation_failure() failed"); + return OGS_ERROR; + } rv = ngap_send_to_ran_ue(source_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -494,7 +532,10 @@ int ngap_send_handover_command(amf_ue_t *amf_ue) ogs_assert(source_ue); ngapbuf = ngap_build_handover_command(source_ue); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_handover_command() failed"); + return OGS_ERROR; + } rv = ngap_send_to_ran_ue(source_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -510,7 +551,10 @@ int ngap_send_handover_cancel_ack(ran_ue_t *source_ue) ogs_assert(source_ue); ngapbuf = ngap_build_handover_cancel_ack(source_ue); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_handover_cancel_ack() failed"); + return OGS_ERROR; + } rv = ngap_send_to_ran_ue(source_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -529,7 +573,10 @@ int ngap_send_downlink_ran_status_transfer( ogs_assert(transfer); ngapbuf = ngap_build_uplink_ran_status_transfer(target_ue, transfer); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ngap_build_uplink_ran_status_transfer() failed"); + return OGS_ERROR; + } rv = ngap_send_to_ran_ue(target_ue, ngapbuf); ogs_expect(rv == OGS_OK); @@ -550,7 +597,10 @@ int ngap_send_error_indication( ngapbuf = ogs_ngap_build_error_indication( ran_ue_ngap_id, amf_ue_ngap_id, group, cause); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ogs_ngap_build_error_indication() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngapbuf, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -562,17 +612,18 @@ int ngap_send_error_indication2( amf_ue_t *amf_ue, NGAP_Cause_PR group, long cause) { int rv; - amf_gnb_t *gnb; ran_ue_t *ran_ue; ogs_assert(amf_ue); ran_ue = ran_ue_cycle(amf_ue->ran_ue); - ogs_expect_or_return_val(ran_ue, OGS_ERROR); - gnb = ran_ue->gnb; - ogs_expect_or_return_val(gnb, OGS_ERROR); + if (!ran_ue) { + ogs_error("NG context has already been removed"); + return OGS_NOTFOUND; + } rv = ngap_send_error_indication( - gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, group, cause); + ran_ue->gnb, &ran_ue->ran_ue_ngap_id, &ran_ue->amf_ue_ngap_id, + group, cause); ogs_expect(rv == OGS_OK); return rv; @@ -588,7 +639,10 @@ int ngap_send_ng_reset_ack( ogs_assert(gnb); ngapbuf = ogs_ngap_build_ng_reset_ack(partOfNG_Interface); - ogs_expect_or_return_val(ngapbuf, OGS_ERROR); + if (!ngapbuf) { + ogs_error("ogs_ngap_build_ng_reset_ack() failed"); + return OGS_ERROR; + } rv = ngap_send_to_gnb(gnb, ngapbuf, NGAP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); diff --git a/src/amf/ngap-path.h b/src/amf/ngap-path.h index 1ad54ef9e..c3a7e1bb8 100644 --- a/src/amf/ngap-path.h +++ b/src/amf/ngap-path.h @@ -35,8 +35,6 @@ void ngap_close(void); ogs_sock_t *ngap_server(ogs_socknode_t *node); void ngap_recv_upcall(short when, ogs_socket_t fd, void *data); -int ngap_send(ogs_sock_t *sock, - ogs_pkbuf_t *pkbuf, ogs_sockaddr_t *addr, uint16_t stream_no); int ngap_send_to_gnb( amf_gnb_t *gnb, ogs_pkbuf_t *pkb, uint16_t stream_no); diff --git a/src/amf/ngap-sm.c b/src/amf/ngap-sm.c index 729e948b6..cf36e6c54 100644 --- a/src/amf/ngap-sm.c +++ b/src/amf/ngap-sm.c @@ -39,6 +39,8 @@ void ngap_state_final(ogs_fsm_t *s, amf_event_t *e) void ngap_state_operational(ogs_fsm_t *s, amf_event_t *e) { + int r; + amf_gnb_t *gnb = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -192,7 +194,10 @@ void ngap_state_operational(ogs_fsm_t *s, amf_event_t *e) ogs_assert(e->ran_ue); ogs_assert(e->pkbuf); - ogs_expect(OGS_OK == ngap_send_to_ran_ue(e->ran_ue, e->pkbuf)); + r = ngap_send_to_ran_ue(e->ran_ue, e->pkbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + ogs_timer_delete(e->timer); break; default: diff --git a/src/amf/nnrf-handler.c b/src/amf/nnrf-handler.c index 561d5fc0d..f42e80dc0 100644 --- a/src/amf/nnrf-handler.c +++ b/src/amf/nnrf-handler.c @@ -25,6 +25,8 @@ void amf_nnrf_handle_nf_discover( ogs_sbi_xact_t *xact, ogs_sbi_message_t *recvmsg) { + int r; + ogs_sbi_nf_instance_t *nf_instance = NULL; ogs_sbi_object_t *sbi_object = NULL; ogs_sbi_service_type_e service_type = OGS_SBI_SERVICE_TYPE_NULL; @@ -68,9 +70,10 @@ void amf_nnrf_handle_nf_discover( ogs_assert(amf_ue); ogs_error("[%s] (NF discover) No [%s]", amf_ue->suci, ogs_sbi_service_type_to_name(service_type)); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi(amf_ue, - OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); + r = nas_5gs_send_gmm_reject_from_sbi(amf_ue, + OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OGS_SBI_OBJ_SESS_TYPE: sess = (amf_sess_t *)sbi_object; @@ -82,15 +85,17 @@ void amf_nnrf_handle_nf_discover( ogs_error("[%d:%d] (NF discover) No [%s]", sess->psi, sess->pti, ogs_sbi_service_type_to_name(service_type)); if (sess->payload_container_type) { - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_transport, - NGAP_CauseTransport_transport_resource_unavailable)); + NGAP_CauseTransport_transport_resource_unavailable); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: diff --git a/src/amf/nnssf-handler.c b/src/amf/nnssf-handler.c index 19050bdd7..74c929058 100644 --- a/src/amf/nnssf-handler.c +++ b/src/amf/nnssf-handler.c @@ -25,6 +25,7 @@ int amf_nnssf_nsselection_handle_get( amf_sess_t *sess, ogs_sbi_message_t *recvmsg) { bool rc; + int r; OpenAPI_uri_scheme_e scheme = OpenAPI_uri_scheme_NULL; ogs_sbi_client_t *client = NULL, *scp_client = NULL; ogs_sockaddr_t *addr = NULL; @@ -44,34 +45,38 @@ int amf_nnssf_nsselection_handle_get( if (recvmsg->res_status != OGS_SBI_HTTP_STATUS_OK) { ogs_error("[%s] HTTP response error [%d]", amf_ue->supi, recvmsg->res_status); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_status(amf_ue, recvmsg->res_status)); + r = nas_5gs_send_gmm_status(amf_ue, recvmsg->res_status); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } AuthorizedNetworkSliceInfo = recvmsg->AuthorizedNetworkSliceInfo; if (!AuthorizedNetworkSliceInfo) { ogs_error("No AuthorizedNetworkSliceInfo"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } NsiInformation = AuthorizedNetworkSliceInfo->nsi_information; if (!NsiInformation) { ogs_error("No NsiInformation"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!NsiInformation->nrf_id) { ogs_error("No nrfId"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -97,9 +102,10 @@ int amf_nnssf_nsselection_handle_get( if (rc == false || scheme == OpenAPI_uri_scheme_NULL) { ogs_error("[%s:%d] Invalid URI [%s]", amf_ue->supi, sess->psi, NsiInformation->nrf_id); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR;; } diff --git a/src/amf/npcf-handler.c b/src/amf/npcf-handler.c index f3f30df1c..2ba4a58a2 100644 --- a/src/amf/npcf-handler.c +++ b/src/amf/npcf-handler.c @@ -25,7 +25,7 @@ int amf_npcf_am_policy_control_handle_create( amf_ue_t *amf_ue, ogs_sbi_message_t *recvmsg) { - int rv; + int r, rv; uint64_t supported_features; @@ -38,33 +38,37 @@ int amf_npcf_am_policy_control_handle_create( if (recvmsg->res_status != OGS_SBI_HTTP_STATUS_CREATED) { ogs_error("[%s] HTTP response error [%d]", amf_ue->supi, recvmsg->res_status); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi(amf_ue, recvmsg->res_status)); + r = nas_5gs_send_gmm_reject_from_sbi(amf_ue, recvmsg->res_status); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!recvmsg->http.location) { ogs_error("[%s] No http.location", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } PolicyAssociation = recvmsg->PolicyAssociation; if (!PolicyAssociation) { ogs_error("No PolicyAssociation"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!PolicyAssociation->supp_feat) { ogs_error("No suppFeat"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -75,9 +79,10 @@ int amf_npcf_am_policy_control_handle_create( if (rv != OGS_OK) { ogs_error("[%s] Cannot parse http.location [%s]", amf_ue->supi, recvmsg->http.location); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -86,9 +91,10 @@ int amf_npcf_am_policy_control_handle_create( amf_ue->supi, recvmsg->http.location); ogs_sbi_header_free(&header); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } diff --git a/src/amf/nsmf-handler.c b/src/amf/nsmf-handler.c index de691cbec..a20f2c717 100644 --- a/src/amf/nsmf-handler.c +++ b/src/amf/nsmf-handler.c @@ -27,7 +27,7 @@ int amf_nsmf_pdusession_handle_create_sm_context( amf_sess_t *sess, ogs_sbi_message_t *recvmsg) { - int rv; + int rv, r; ogs_assert(sess); ogs_assert(recvmsg); @@ -38,10 +38,11 @@ int amf_nsmf_pdusession_handle_create_sm_context( if (!recvmsg->http.location) { ogs_error("[%d:%d] No http.location", sess->psi, sess->pti); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -53,10 +54,11 @@ int amf_nsmf_pdusession_handle_create_sm_context( if (rv != OGS_OK) { ogs_error("[%d:%d] Cannot parse http.location [%s]", sess->psi, sess->pti, recvmsg->http.location); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -66,10 +68,11 @@ int amf_nsmf_pdusession_handle_create_sm_context( sess->psi, sess->pti, recvmsg->http.location); ogs_sbi_header_free(&header); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -86,7 +89,7 @@ int amf_nsmf_pdusession_handle_create_sm_context( amf_ue_t *amf_ue = sess->amf_ue; ogs_assert(amf_ue); - rv = nas_5gs_send_to_gnb(amf_ue, + r = nas_5gs_send_to_gnb(amf_ue, sess->pdu_session_establishment_accept); sess->pdu_session_establishment_accept = NULL; @@ -96,10 +99,11 @@ int amf_nsmf_pdusession_handle_create_sm_context( sess->psi, sess->pti); ogs_sbi_header_free(&header); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -120,19 +124,21 @@ int amf_nsmf_pdusession_handle_create_sm_context( SmContextCreateError = recvmsg->SmContextCreateError; if (!SmContextCreateError) { ogs_error("[%d:%d] No SmContextCreateError", sess->psi, sess->pti); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!SmContextCreateError->error) { ogs_error("[%d:%d] No Error", sess->psi, sess->pti); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -150,19 +156,21 @@ int amf_nsmf_pdusession_handle_create_sm_context( sess->psi, sess->pti); n1smbuf = ogs_pkbuf_copy(n1smbuf); ogs_assert(n1smbuf); - ogs_assert(OGS_OK == - nas_5gs_send_gsm_reject(sess, - OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, n1smbuf)); + r = nas_5gs_send_gsm_reject(sess, + OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, n1smbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } } ogs_error("[%d:%d] 5GMM was not forwarded", sess->psi, sess->pti); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -173,6 +181,8 @@ int amf_nsmf_pdusession_handle_create_sm_context( int amf_nsmf_pdusession_handle_update_sm_context( amf_sess_t *sess, int state, ogs_sbi_message_t *recvmsg) { + int r; + amf_ue_t *amf_ue = NULL; ran_ue_t *ran_ue = NULL; @@ -239,8 +249,9 @@ int amf_nsmf_pdusession_handle_update_sm_context( amf_ue, 0, NULL)); } else { CLEAR_AMF_UE_TIMER(amf_ue->t3550); - ogs_assert(OGS_OK == - nas_5gs_send_registration_accept(amf_ue)); + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_N2_TRANSFER( amf_ue, pdu_session_resource_setup_request); @@ -255,8 +266,9 @@ int amf_nsmf_pdusession_handle_update_sm_context( AMF_RELEASE_SM_CONTEXT_SERVICE_ACCEPT) && AMF_SESSION_SYNC_DONE(amf_ue, AMF_UPDATE_SM_CONTEXT_SERVICE_REQUEST)) { - ogs_assert(OGS_OK == - nas_5gs_send_service_accept(amf_ue)); + r = nas_5gs_send_service_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_N2_TRANSFER( amf_ue, pdu_session_resource_setup_request); @@ -267,8 +279,9 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (AMF_SESSION_SYNC_DONE(amf_ue, AMF_UPDATE_SM_CONTEXT_HANDOVER_REQUIRED)) { - ogs_assert(OGS_OK == - ngap_send_handover_request(amf_ue)); + r = ngap_send_handover_request(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_N2_TRANSFER(amf_ue, handover_request); } @@ -282,10 +295,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n1smbuf) { ogs_error("[%s:%d] No N1 SM Content [%s]", amf_ue->supi, sess->psi, n1SmMsg->content_id); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -293,10 +307,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n2smbuf) { ogs_error("[%s:%d] No N2 SM Content", amf_ue->supi, sess->psi); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -311,9 +326,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( n2smbuf = ogs_pkbuf_copy(n2smbuf); ogs_assert(n2smbuf); - ogs_assert(OGS_OK == - nas_send_pdu_session_modification_command( - sess, n1smbuf, n2smbuf)); + r = nas_send_pdu_session_modification_command( + sess, n1smbuf, n2smbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; @@ -321,10 +337,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n1smbuf) { ogs_error("[%s:%d] No N1 SM Content [%s]", amf_ue->supi, sess->psi, n1SmMsg->content_id); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -332,10 +349,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n2smbuf) { ogs_error("[%s:%d] No N2 SM Content", amf_ue->supi, sess->psi); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -350,19 +368,21 @@ int amf_nsmf_pdusession_handle_update_sm_context( n2smbuf = ogs_pkbuf_copy(n2smbuf); ogs_assert(n2smbuf); - ogs_assert(OGS_OK == - nas_send_pdu_session_release_command( - sess, n1smbuf, n2smbuf)); + r = nas_send_pdu_session_release_command( + sess, n1smbuf, n2smbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OpenAPI_n2_sm_info_type_PATH_SWITCH_REQ_ACK: if (!n2smbuf) { ogs_error("[%s:%d] No N2 SM Content", amf_ue->supi, sess->psi); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -372,8 +392,9 @@ int amf_nsmf_pdusession_handle_update_sm_context( ogs_pkbuf_copy(n2smbuf)); if (AMF_SESSION_SYNC_DONE(amf_ue, state)) { - ogs_assert(OGS_OK == - ngap_send_path_switch_ack(sess)); + r = ngap_send_path_switch_ack(sess); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_N2_TRANSFER(amf_ue, path_switch_request_ack); } @@ -383,10 +404,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n2smbuf) { ogs_error("[%s:%d] No N2 SM Content", amf_ue->supi, sess->psi); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -395,8 +417,9 @@ int amf_nsmf_pdusession_handle_update_sm_context( sess, handover_command, ogs_pkbuf_copy(n2smbuf)); if (AMF_SESSION_SYNC_DONE(amf_ue, state)) { - ogs_assert(OGS_OK == - ngap_send_handover_command(amf_ue)); + r = ngap_send_handover_command(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); AMF_UE_CLEAR_N2_TRANSFER(amf_ue, handover_command); } @@ -405,10 +428,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( default: ogs_error("Not implemented [%d]", SmContextUpdatedData->n2_sm_info_type); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, + r = ngap_send_error_indication2(amf_ue, NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error)); + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else { @@ -478,11 +502,12 @@ int amf_nsmf_pdusession_handle_update_sm_context( ogs_warn("PDUSessionResourceSetupResponse(Unsuccessful)"); ogs_assert(amf_ue->deactivation.group); - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + r = ngap_send_amf_ue_context_release_command(amf_ue, amf_ue->deactivation.group, amf_ue->deactivation.cause, - NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0)); + NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (state == AMF_UPDATE_SM_CONTEXT_MODIFIED) { /* @@ -515,11 +540,12 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (AMF_SESSION_SYNC_DONE(amf_ue, state)) { ogs_assert(amf_ue->deactivation.group); - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + r = ngap_send_amf_ue_context_release_command(amf_ue, amf_ue->deactivation.group, amf_ue->deactivation.cause, - NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0)); + NGAP_UE_CTX_REL_NG_REMOVE_AND_UNLINK, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (state == AMF_UPDATE_SM_CONTEXT_REGISTRATION_REQUEST) { @@ -597,11 +623,12 @@ int amf_nsmf_pdusession_handle_update_sm_context( target_ue = source_ue->target_ue; ogs_assert(target_ue); - ogs_assert(OGS_OK == - ngap_send_ran_ue_context_release_command(target_ue, + r = ngap_send_ran_ue_context_release_command(target_ue, NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_handover_cancelled, - NGAP_UE_CTX_REL_NG_HANDOVER_CANCEL, 0)); + NGAP_UE_CTX_REL_NG_HANDOVER_CANCEL, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (state == AMF_UPDATE_SM_CONTEXT_HANDOVER_NOTIFY) { @@ -636,9 +663,11 @@ int amf_nsmf_pdusession_handle_update_sm_context( ogs_debug(" SUPI[%s]", amf_ue->supi); ran_ue_remove(ran_ue); - if (ogs_list_count(&gnb->ran_ue_list) == 0) - ogs_assert(OGS_OK == - ngap_send_ng_reset_ack(gnb, NULL)); + if (ogs_list_count(&gnb->ran_ue_list) == 0) { + r = ngap_send_ng_reset_ack(gnb, NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } } else { ogs_warn("[%s] RAN-NG Context has already been removed", @@ -673,9 +702,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( * where PartOfNG_interface was requested * REMOVED */ ogs_assert(gnb->ng_reset_ack); - ogs_expect(OGS_OK == - ngap_send_to_gnb(gnb, - gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING)); + r = ngap_send_to_gnb( + gnb, gnb->ng_reset_ack, NGAP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* Clear NG-Reset Ack Buffer */ gnb->ng_reset_ack = NULL; @@ -722,18 +752,20 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!SmContextUpdateError) { ogs_error("[%d:%d] No SmContextUpdateError [%d]", sess->psi, sess->pti, recvmsg->res_status); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } if (!SmContextUpdateError->error) { ogs_error("[%d:%d] No Error [%d]", sess->psi, sess->pti, recvmsg->res_status); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -752,9 +784,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( n1smbuf = ogs_pkbuf_copy(n1smbuf); ogs_assert(n1smbuf); - ogs_assert(OGS_OK == - nas_5gs_send_gsm_reject(sess, - OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, n1smbuf)); + r = nas_5gs_send_gsm_reject(sess, + OGS_NAS_PAYLOAD_CONTAINER_N1_SM_INFORMATION, n1smbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -764,9 +797,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( n2SmInfo = SmContextUpdateError->n2_sm_info; if (!n2SmInfo || !n2SmInfo->content_id) { ogs_error("[%d:%d] No N2 SM Message", sess->psi, sess->pti); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -776,9 +810,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( if (!n2smbuf) { ogs_error("[%d:%d] No N2 SM Content [%s]", sess->psi, sess->pti, n2SmInfo->content_id); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -786,9 +821,10 @@ int amf_nsmf_pdusession_handle_update_sm_context( ogs_error("[%d:%d] Error Indication", sess->psi, sess->pti); - ogs_expect(OGS_OK == - ngap_send_error_indication2(amf_ue, - NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error)); + r = ngap_send_error_indication2(amf_ue, + NGAP_Cause_PR_protocol, NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -798,6 +834,7 @@ int amf_nsmf_pdusession_handle_update_sm_context( int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state) { + int r; amf_ue_t *amf_ue = NULL; ogs_assert(sess); @@ -825,8 +862,9 @@ int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state) amf_ue, 0, NULL)); } else { CLEAR_AMF_UE_TIMER(amf_ue->t3550); - ogs_assert(OGS_OK == - nas_5gs_send_registration_accept(amf_ue)); + r = nas_5gs_send_registration_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -836,10 +874,14 @@ int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state) * 2. Release All SM contexts * 3. Service accept */ - if (AMF_SESSION_SYNC_DONE(amf_ue, AMF_RELEASE_SM_CONTEXT_SERVICE_ACCEPT) && - AMF_SESSION_SYNC_DONE(amf_ue, AMF_UPDATE_SM_CONTEXT_SERVICE_REQUEST)) - ogs_assert(OGS_OK == - nas_5gs_send_service_accept(amf_ue)); + if (AMF_SESSION_SYNC_DONE(amf_ue, + AMF_RELEASE_SM_CONTEXT_SERVICE_ACCEPT) && + AMF_SESSION_SYNC_DONE(amf_ue, + AMF_UPDATE_SM_CONTEXT_SERVICE_REQUEST)) { + r = nas_5gs_send_service_accept(amf_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } } else { @@ -852,10 +894,11 @@ int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state) * 3. UE Context release command * 4. UE Context release complete */ - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + r = ngap_send_amf_ue_context_release_command(amf_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_NG_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (state == AMF_RELEASE_SM_CONTEXT_REGISTRATION_ACCEPT) { @@ -917,10 +960,11 @@ int amf_nsmf_pdusession_handle_release_sm_context(amf_sess_t *sess, int state) * 3. UE Context release command * 4. UE Context release complete */ - ogs_assert(OGS_OK == - ngap_send_amf_ue_context_release_command(amf_ue, + r = ngap_send_amf_ue_context_release_command(amf_ue, NGAP_Cause_PR_nas, NGAP_CauseNas_normal_release, - NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (OGS_FSM_CHECK(&amf_ue->sm, gmm_state_initial_context_setup)) { diff --git a/src/amf/nudm-handler.c b/src/amf/nudm-handler.c index a9586ae01..a165a14ea 100644 --- a/src/amf/nudm-handler.c +++ b/src/amf/nudm-handler.c @@ -25,7 +25,7 @@ int amf_nudm_sdm_handle_provisioned( amf_ue_t *amf_ue, int state, ogs_sbi_message_t *recvmsg) { - int i; + int i, r; ogs_assert(amf_ue); ogs_assert(recvmsg); @@ -259,9 +259,10 @@ int amf_nudm_sdm_handle_provisioned( if (!recvmsg->http.location) { ogs_error("[%s] No http.location", amf_ue->supi); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -272,9 +273,10 @@ int amf_nudm_sdm_handle_provisioned( if (rv != OGS_OK) { ogs_error("[%s] Cannot parse http.location [%s]", amf_ue->supi, recvmsg->http.location); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -283,9 +285,10 @@ int amf_nudm_sdm_handle_provisioned( amf_ue->supi, recvmsg->http.location); ogs_sbi_header_free(&header); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } diff --git a/src/amf/sbi-path.c b/src/amf/sbi-path.c index 1d351c819..45ee4c4d9 100644 --- a/src/amf/sbi-path.c +++ b/src/amf/sbi-path.c @@ -92,6 +92,7 @@ bool amf_ue_sbi_discover_and_send( ogs_sbi_request_t *(*build)(amf_ue_t *amf_ue, void *data), amf_ue_t *amf_ue, int state, void *data) { + int r; ogs_sbi_xact_t *xact = NULL; ogs_assert(service_type); @@ -103,9 +104,10 @@ bool amf_ue_sbi_discover_and_send( (ogs_sbi_build_f)build, amf_ue, data); if (!xact) { ogs_error("amf_ue_sbi_discover_and_send() failed"); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return false; } @@ -114,9 +116,10 @@ bool amf_ue_sbi_discover_and_send( if (ogs_sbi_discover_and_send(xact) != true) { ogs_error("amf_ue_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); - ogs_assert(OGS_OK == - nas_5gs_send_gmm_reject_from_sbi( - amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT)); + r = nas_5gs_send_gmm_reject_from_sbi( + amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return false; } @@ -129,6 +132,7 @@ bool amf_sess_sbi_discover_and_send( ogs_sbi_request_t *(*build)(amf_sess_t *sess, void *data), amf_sess_t *sess, int state, void *data) { + int r; ogs_sbi_xact_t *xact = NULL; ogs_assert(service_type); @@ -140,8 +144,10 @@ bool amf_sess_sbi_discover_and_send( (ogs_sbi_build_f)build, sess, data); if (!xact) { ogs_error("amf_sess_sbi_discover_and_send() failed"); - ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return false; } @@ -150,8 +156,10 @@ bool amf_sess_sbi_discover_and_send( if (ogs_sbi_discover_and_send(xact) != true) { ogs_error("amf_sess_sbi_discover_and_send() failed"); ogs_sbi_xact_remove(xact); - ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return false; } @@ -160,7 +168,7 @@ bool amf_sess_sbi_discover_and_send( static int client_discover_cb( int status, ogs_sbi_response_t *response, void *data) { - int rv; + int r, rv; ogs_sbi_message_t message; ogs_sbi_xact_t *xact = NULL; @@ -216,24 +224,30 @@ static int client_discover_cb( rv = ogs_sbi_parse_response(&message, response); if (rv != OGS_OK) { ogs_error("cannot parse HTTP response"); - ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); goto cleanup; } if (message.res_status != OGS_SBI_HTTP_STATUS_OK) { ogs_error("NF-Discover failed [%d]", message.res_status); - ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); goto cleanup; } if (!message.SearchResult) { ogs_error("No SearchResult"); - ogs_assert(OGS_OK == nas_5gs_send_back_gsm_message(sess, - OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME)); + r = nas_5gs_send_back_gsm_message(sess, + OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); goto cleanup; } @@ -247,10 +261,11 @@ static int client_discover_cb( ogs_error("[%s:%d] (NF discover) No [%s]", amf_ue->supi, sess->psi, ogs_sbi_service_type_to_name(service_type)); - ogs_assert(OGS_OK == - nas_5gs_send_back_gsm_message(sess, + r = nas_5gs_send_back_gsm_message(sess, OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED, - AMF_NAS_BACKOFF_TIME)); + AMF_NAS_BACKOFF_TIME); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); goto cleanup; } @@ -294,11 +309,18 @@ bool amf_sess_sbi_discover_by_nsi( xact = ogs_sbi_xact_add( &sess->sbi, service_type, discovery_option, NULL, NULL, NULL); - ogs_expect_or_return_val(xact, false); + if (!xact) { + ogs_error("ogs_sbi_xact_add() failed"); + return false; + } xact->request = amf_nnrf_disc_build_discover( sess->nssf.nrf.id, xact->service_type, xact->discovery_option); - ogs_expect_or_return_val(xact->request, false); + if (!xact->request) { + ogs_error("amf_nnrf_disc_build_discover() failed"); + ogs_sbi_xact_remove(xact); + return false; + } return ogs_sbi_client_send_request( client, client_discover_cb, xact->request, xact); @@ -460,7 +482,10 @@ bool amf_sbi_send_n1_n2_failure_notify( ogs_assert(client); request = amf_nsmf_callback_build_n1_n2_failure_notify(sess, cause); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("amf_nsmf_callback_build_n1_n2_failure_notify() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); diff --git a/src/mme/emm-handler.c b/src/mme/emm-handler.c index e25b6d2a0..e52a41ee4 100644 --- a/src/mme/emm-handler.c +++ b/src/mme/emm-handler.c @@ -35,6 +35,7 @@ int emm_handle_attach_request(mme_ue_t *mme_ue, ogs_nas_eps_attach_request_t *attach_request, ogs_pkbuf_t *pkbuf) { + int r; int served_tai_index = 0; ogs_nas_eps_mobile_identity_guti_t *eps_mobile_identity_guti = NULL; @@ -129,10 +130,11 @@ int emm_handle_attach_request(mme_ue_t *mme_ue, /* Send Attach Reject */ ogs_warn("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]", ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); @@ -172,10 +174,11 @@ int emm_handle_attach_request(mme_ue_t *mme_ue, "but Integrity[0x%x] cannot be bypassed with EIA0", mme_selected_enc_algorithm(mme_ue), mme_selected_int_algorithm(mme_ue)); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -222,7 +225,7 @@ int emm_handle_attach_request(mme_ue_t *mme_ue, int emm_handle_attach_complete( mme_ue_t *mme_ue, ogs_nas_eps_attach_complete_t *attach_complete) { - int rv; + int r, rv; ogs_pkbuf_t *emmbuf = NULL; ogs_nas_eps_message_t message; @@ -315,15 +318,19 @@ int emm_handle_attach_complete( network_daylight_saving_time->length = 1; emmbuf = nas_eps_security_encode(mme_ue, &message); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("nas_eps_security_encode() failed"); + return OGS_ERROR; + } - rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + r = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_debug("EMM information"); ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); - return rv; + return r; } int emm_handle_identity_response( @@ -487,6 +494,7 @@ int emm_handle_service_request( int emm_handle_tau_request(mme_ue_t *mme_ue, ogs_nas_eps_tracking_area_update_request_t *tau_request, ogs_pkbuf_t *pkbuf) { + int r; int served_tai_index = 0; ogs_nas_eps_mobile_identity_guti_t *eps_mobile_identity_guti = NULL; @@ -560,9 +568,10 @@ int emm_handle_tau_request(mme_ue_t *mme_ue, /* Send TAU reject */ ogs_warn("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]", ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject( - mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); + r = nas_eps_send_tau_reject( + mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); @@ -625,6 +634,7 @@ int emm_handle_tau_request(mme_ue_t *mme_ue, int emm_handle_extended_service_request(mme_ue_t *mme_ue, ogs_nas_eps_extended_service_request_t *extended_service_request) { + int r; int served_tai_index = 0; ogs_nas_service_type_t *service_type = @@ -678,9 +688,10 @@ int emm_handle_extended_service_request(mme_ue_t *mme_ue, /* Send TAU reject */ ogs_warn("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]", ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject( - mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); + r = nas_eps_send_tau_reject( + mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); diff --git a/src/mme/emm-sm.c b/src/mme/emm-sm.c index 4a5f70a10..b0d6dd189 100644 --- a/src/mme/emm-sm.c +++ b/src/mme/emm-sm.c @@ -56,7 +56,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e); void emm_state_de_registered(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r; mme_ue_t *mme_ue = NULL; ogs_assert(e); @@ -85,14 +85,10 @@ void emm_state_de_registered(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission"); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { - ogs_assert(mme_ue->t3470.pkbuf); - rv = nas_eps_send_identity_request(mme_ue); - if (rv == OGS_OK) { - mme_ue->t3470.retry_count++; - } else { - ogs_error("nas_eps_send_identity_request() failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + mme_ue->t3470.retry_count++; + r = nas_eps_send_identity_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -109,7 +105,7 @@ void emm_state_de_registered(ogs_fsm_t *s, mme_event_t *e) void emm_state_registered(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r; mme_ue_t *mme_ue = NULL; ogs_assert(e); @@ -146,7 +142,9 @@ void emm_state_registered(ogs_fsm_t *s, mme_event_t *e) * We don't have to set CNDomain. * So, we just set CNDomain to 0 */ - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, 0)); + r = s1ap_send_paging(mme_ue, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -157,14 +155,10 @@ void emm_state_registered(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission"); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { - ogs_assert(mme_ue->t3470.pkbuf); - rv = nas_eps_send_identity_request(mme_ue); - if (rv == OGS_OK) { - mme_ue->t3470.retry_count++; - } else { - ogs_error("nas_eps_send_identity_request() failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + mme_ue->t3470.retry_count++; + r = nas_eps_send_identity_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -175,14 +169,10 @@ void emm_state_registered(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission"); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { - ogs_assert(mme_ue->t3422.pkbuf); - rv = nas_eps_send_detach_request(mme_ue); - if (rv == OGS_OK) { - mme_ue->t3422.retry_count++; - } else { - ogs_error("nas_eps_send_detach_request() failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + mme_ue->t3422.retry_count++; + r = nas_eps_send_detach_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -199,7 +189,7 @@ void emm_state_registered(ogs_fsm_t *s, mme_event_t *e) static void common_register_state(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; enb_ue_t *enb_ue = NULL; @@ -234,42 +224,47 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { ogs_info("Service request : Unknown UE"); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } if (!SECURITY_CONTEXT_IS_VALID(mme_ue)) { ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } if (!SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { ogs_warn("No Session Context : IMSI[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } if (!ACTIVE_EPS_BEARERS_IS_AVAIABLE(mme_ue)) { ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } - ogs_assert(OGS_OK == - s1ap_send_initial_context_setup_request(mme_ue)); + r = s1ap_send_initial_context_setup_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_registered); break; } @@ -314,8 +309,9 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { CLEAR_MME_UE_TIMER(mme_ue->t3470); - ogs_assert(OGS_OK == - nas_eps_send_identity_request(mme_ue)); + r = nas_eps_send_identity_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; } @@ -328,10 +324,11 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) &mme_ue->pdn_connectivity_request); if (rv != OGS_OK) { ogs_error("nas_eps_send_emm_to_esm() failed"); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -360,27 +357,30 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { ogs_info("TAU request : Unknown UE"); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_tau_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } if (!SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_tau_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, emm_state_exception); break; } if (!ACTIVE_EPS_BEARERS_IS_AVAIABLE(mme_ue)) { ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject(mme_ue, - OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); + r = nas_eps_send_tau_reject(mme_ue, + OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -459,20 +459,23 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (e->s1ap_code == S1AP_ProcedureCode_id_initialUEMessage) { ogs_debug(" Iniital UE Message"); if (mme_ue->nas_eps.update.active_flag) { - ogs_assert(OGS_OK == - nas_eps_send_tau_accept(mme_ue, - S1AP_ProcedureCode_id_InitialContextSetup)); + r = nas_eps_send_tau_accept(mme_ue, + S1AP_ProcedureCode_id_InitialContextSetup); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == - nas_eps_send_tau_accept(mme_ue, - S1AP_ProcedureCode_id_downlinkNASTransport)); + r = nas_eps_send_tau_accept(mme_ue, + S1AP_ProcedureCode_id_downlinkNASTransport); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (e->s1ap_code == S1AP_ProcedureCode_id_uplinkNASTransport) { ogs_debug(" Uplink NAS Transport"); - ogs_assert(OGS_OK == - nas_eps_send_tau_accept(mme_ue, - S1AP_ProcedureCode_id_downlinkNASTransport)); + r = nas_eps_send_tau_accept(mme_ue, + S1AP_ProcedureCode_id_downlinkNASTransport); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_fatal("Invalid Procedure Code[%d]", (int)e->s1ap_code); } @@ -501,27 +504,30 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { ogs_warn("Extended Service request : Unknown UE"); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } if (!SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, emm_state_exception); break; } if (!SECURITY_CONTEXT_IS_VALID(mme_ue)) { ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -531,10 +537,10 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_P_TMSI_IS_AVAILABLE(mme_ue)) { ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); mme_send_release_access_bearer_or_ue_context_release( enb_ue); break; @@ -558,16 +564,17 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) } else { ogs_warn(" Unknown CSFB Service Type[%d]", mme_ue->nas_eps.service.value); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } - ogs_assert(OGS_OK == - s1ap_send_initial_context_setup_request(mme_ue)); + r = s1ap_send_initial_context_setup_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (e->s1ap_code == S1AP_ProcedureCode_id_uplinkNASTransport) { @@ -575,10 +582,10 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) if (!MME_P_TMSI_IS_AVAILABLE(mme_ue)) { ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; } @@ -600,16 +607,17 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) } else { ogs_warn(" Unknown CSFB Service Type[%d]", mme_ue->nas_eps.service.value); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) - ); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } - ogs_assert(OGS_OK == - s1ap_send_ue_context_modification_request(mme_ue)); + r = s1ap_send_ue_context_modification_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_error("Invalid Procedure Code[%d]", (int)e->s1ap_code); } @@ -646,10 +654,11 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) CLEAR_MME_UE_TIMER(mme_ue->t3422); - rv = s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_detach, S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); - ogs_expect(rv == OGS_OK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_de_registered); break; @@ -669,11 +678,12 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) MME_UE_S1AP_ID = enb_ue->mme_ue_s1ap_id; ENB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id; - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb_ue->enb, + r = s1ap_send_error_indication(enb_ue->enb, &MME_UE_S1AP_ID, &ENB_UE_S1AP_ID, S1AP_Cause_PR_transport, - S1AP_CauseTransport_transport_resource_unavailable)); + S1AP_CauseTransport_transport_resource_unavailable); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -700,7 +710,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; ogs_nas_eps_message_t *message = NULL; @@ -745,8 +755,9 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) authentication_response_parameter->length); ogs_log_hexdump(OGS_LOG_WARN, mme_ue->xres, OGS_MAX_RES_LEN); - ogs_assert(OGS_OK == - nas_eps_send_authentication_reject(mme_ue)); + r = nas_eps_send_authentication_reject(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); } else { OGS_FSM_TRAN(&mme_ue->sm, &emm_state_security_mode); @@ -789,8 +800,9 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) break; } - ogs_assert(OGS_OK == - nas_eps_send_authentication_reject(mme_ue)); + r = nas_eps_send_authentication_reject(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); break; @@ -841,16 +853,14 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission", mme_ue->imsi_bcd); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - ogs_expect(OGS_OK == - nas_eps_send_authentication_reject(mme_ue)); + r = nas_eps_send_authentication_reject(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - rv = nas_eps_send_authentication_request(mme_ue); - if (rv == OGS_OK) { - mme_ue->t3460.retry_count++; - } else { - ogs_error("nas_eps_send_authentication_request() failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + mme_ue->t3460.retry_count++; + r = nas_eps_send_authentication_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -867,7 +877,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e) void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; ogs_nas_eps_message_t *message = NULL; ogs_nas_security_header_type_t h; @@ -883,8 +893,9 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) switch (e->id) { case OGS_FSM_ENTRY_SIG: CLEAR_MME_UE_TIMER(mme_ue->t3460); - ogs_assert(OGS_OK == - nas_eps_send_security_mode_command(mme_ue)); + r = nas_eps_send_security_mode_command(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OGS_FSM_EXIT_SIG: break; @@ -895,9 +906,10 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) if (message->emm.h.security_header_type == OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) { ogs_debug("Service request"); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -979,9 +991,10 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) break; case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST: ogs_debug("Tracking area update request"); - ogs_assert(OGS_OK == - nas_eps_send_tau_reject(mme_ue, - OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); + r = nas_eps_send_tau_reject(mme_ue, + OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; case OGS_NAS_EPS_EMM_STATUS: @@ -1017,18 +1030,16 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission", mme_ue->imsi_bcd); OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - ogs_expect(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - rv = nas_eps_send_security_mode_command(mme_ue); - if (rv == OGS_OK) { - mme_ue->t3460.retry_count++; - } else { - ogs_error("nas_eps_send_security_mode_command() failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + mme_ue->t3460.retry_count++; + r = nas_eps_send_security_mode_command(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -1045,7 +1056,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e) void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; ogs_nas_eps_message_t *message = NULL; ogs_nas_security_header_type_t h; @@ -1070,9 +1081,10 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) if (message->emm.h.security_header_type == OGS_NAS_SECURITY_HEADER_FOR_SERVICE_REQUEST_MESSAGE) { ogs_debug("Service request"); - ogs_assert(OGS_OK == - nas_eps_send_service_reject(mme_ue, - OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); + r = nas_eps_send_service_reject(mme_ue, + OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } @@ -1225,7 +1237,10 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) mme_ue->t3450.retry_count++; emmbuf = mme_ue->t3450.pkbuf; - ogs_expect_or_return(emmbuf); + if (!emmbuf) { + ogs_error("No emmbuf"); + return; + } mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); ogs_assert(mme_ue->t3450.pkbuf); @@ -1233,12 +1248,9 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) ogs_timer_start(mme_ue->t3450.timer, mme_timer_cfg(MME_TIMER_T3450)->duration); - rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - if (rv != OGS_OK) { - ogs_error("nas_eps_send_to_downlink_nas_transport() " - "failed"); - OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception); - } + r = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -1255,7 +1267,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) void emm_state_exception(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; enb_ue_t *enb_ue = NULL; @@ -1298,8 +1310,9 @@ void emm_state_exception(ogs_fsm_t *s, mme_event_t *e) if (!MME_UE_HAVE_IMSI(mme_ue)) { CLEAR_MME_UE_TIMER(mme_ue->t3470); - ogs_assert(OGS_OK == - nas_eps_send_identity_request(mme_ue)); + r = nas_eps_send_identity_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_de_registered); break; @@ -1314,10 +1327,11 @@ void emm_state_exception(ogs_fsm_t *s, mme_event_t *e) &mme_ue->pdn_connectivity_request); if (rv != OGS_OK) { ogs_error("nas_eps_send_emm_to_esm() failed"); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &emm_state_exception); break; } diff --git a/src/mme/esm-handler.c b/src/mme/esm-handler.c index 7f8cd46c2..242fcbca0 100644 --- a/src/mme/esm-handler.c +++ b/src/mme/esm-handler.c @@ -31,6 +31,7 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, ogs_nas_eps_pdn_connectivity_request_t *req, int create_action) { + int r; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; uint8_t security_protected_required = 0; @@ -65,9 +66,11 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, mme_ue, req->access_point_name.apn); if (!sess->session) { /* Invalid APN */ - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( - sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); + r = nas_eps_send_pdn_connectivity_reject( + sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, + create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_warn("Invalid APN[%s]", req->access_point_name.apn); return OGS_ERROR; } @@ -80,9 +83,11 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, if (derived_pdn_type == 0) { ogs_error("Cannot derived PDN Type [UE:%d,HSS:%d]", sess->request_type.type, sess->session->session_type); - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( - sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, create_action)); + r = nas_eps_send_pdn_connectivity_reject( + sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, + create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } } else { @@ -102,7 +107,9 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, if (security_protected_required) { CLEAR_BEARER_TIMER(bearer->t3489); - ogs_assert(OGS_OK == nas_eps_send_esm_information_request(bearer)); + r = nas_eps_send_esm_information_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_OK; } @@ -137,9 +144,10 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, mme_gtp_send_create_session_request(sess, create_action)); } else { ogs_error("No APN"); - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( - sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); + r = nas_eps_send_pdn_connectivity_reject( + sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -149,6 +157,7 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer, int esm_handle_information_response(mme_sess_t *sess, ogs_nas_eps_esm_information_response_t *rsp) { + int r; mme_ue_t *mme_ue = NULL; ogs_assert(sess); @@ -183,10 +192,11 @@ int esm_handle_information_response(mme_sess_t *sess, if (derived_pdn_type == 0) { ogs_error("Cannot derived PDN Type [UE:%d,HSS:%d]", sess->request_type.type, sess->session->session_type); - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( + r = nas_eps_send_pdn_connectivity_reject( sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, - OGS_GTP_CREATE_IN_ATTACH_REQUEST)); + OGS_GTP_CREATE_IN_ATTACH_REQUEST); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } } else { @@ -203,8 +213,9 @@ int esm_handle_information_response(mme_sess_t *sess, ogs_assert(OGS_OK == sgsap_send_location_update_request(mme_ue)); } else { - ogs_assert(OGS_OK == - nas_eps_send_attach_accept(mme_ue)); + r = nas_eps_send_attach_accept(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else { ogs_assert(OGS_OK == @@ -217,10 +228,11 @@ int esm_handle_information_response(mme_sess_t *sess, else ogs_error("No APN"); - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( + r = nas_eps_send_pdn_connectivity_reject( sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, - OGS_GTP_CREATE_IN_ATTACH_REQUEST)); + OGS_GTP_CREATE_IN_ATTACH_REQUEST); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_ERROR; } @@ -230,6 +242,7 @@ int esm_handle_information_response(mme_sess_t *sess, int esm_handle_bearer_resource_allocation_request( mme_bearer_t *bearer, ogs_nas_eps_message_t *message) { + int r; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; @@ -239,9 +252,10 @@ int esm_handle_bearer_resource_allocation_request( mme_ue = sess->mme_ue; ogs_assert(mme_ue); - ogs_assert(OGS_OK == - nas_eps_send_bearer_resource_allocation_reject( - mme_ue, sess->pti, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); + r = nas_eps_send_bearer_resource_allocation_reject( + mme_ue, sess->pti, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_OK; } diff --git a/src/mme/esm-sm.c b/src/mme/esm-sm.c index 4cb31ac89..72dbf9a90 100644 --- a/src/mme/esm-sm.c +++ b/src/mme/esm-sm.c @@ -68,7 +68,7 @@ void esm_state_final(ogs_fsm_t *s, mme_event_t *e) void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; mme_bearer_t *bearer = NULL; @@ -122,8 +122,9 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) mme_gtp_send_delete_session_request(mme_ue->sgw_ue, sess, OGS_GTP_DELETE_SEND_DEACTIVATE_BEARER_CONTEXT_REQUEST)); } else { - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); + r = nas_eps_send_deactivate_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } OGS_FSM_TRAN(s, esm_state_pdn_will_disconnect); break; @@ -137,30 +138,34 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) h.type = e->nas_type; if (h.integrity_protected == 0) { ogs_error("[%s] No Integrity Protected", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_assert(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, + r = s1ap_send_ue_context_release_command(mme_ue->enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &esm_state_exception); break; } if (!SECURITY_CONTEXT_IS_VALID(mme_ue)) { ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_assert(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, + r = s1ap_send_ue_context_release_command(mme_ue->enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, &esm_state_exception); break; } @@ -230,18 +235,16 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) "Stop retransmission", mme_ue->imsi_bcd); OGS_FSM_TRAN(&bearer->sm, &esm_state_exception); - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject(sess, + r = nas_eps_send_pdn_connectivity_reject(sess, OGS_NAS_ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED, - e->create_action)); + e->create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - rv = nas_eps_send_esm_information_request(bearer); - if (rv == OGS_OK) { - bearer->t3489.retry_count++; - } else { - ogs_error("nas_eps_send_esm_information_request() failed"); - OGS_FSM_TRAN(&bearer->sm, &esm_state_exception); - } + bearer->t3489.retry_count++; + r = nas_eps_send_esm_information_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; default: @@ -258,7 +261,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e) void esm_state_active(ogs_fsm_t *s, mme_event_t *e) { - int rv; + int r, rv; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; mme_bearer_t *bearer = NULL; @@ -309,8 +312,9 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e) mme_gtp_send_delete_session_request(mme_ue->sgw_ue, sess, OGS_GTP_DELETE_SEND_DEACTIVATE_BEARER_CONTEXT_REQUEST)); } else { - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); + r = nas_eps_send_deactivate_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } OGS_FSM_TRAN(s, esm_state_pdn_will_disconnect); break; diff --git a/src/mme/mme-context.c b/src/mme/mme-context.c index 090d5bcda..35d07721a 100644 --- a/src/mme/mme-context.c +++ b/src/mme/mme-context.c @@ -3223,6 +3223,7 @@ mme_bearer_t *mme_bearer_find_by_ue_ebi(mme_ue_t *mme_ue, uint8_t ebi) mme_bearer_t *mme_bearer_find_or_add_by_message( mme_ue_t *mme_ue, ogs_nas_eps_message_t *message, int create_action) { + int r; uint8_t pti = OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED; uint8_t ebi = OGS_NAS_EPS_BEARER_IDENTITY_UNASSIGNED; @@ -3242,10 +3243,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( bearer = mme_bearer_find_by_ue_ebi(mme_ue, ebi); if (!bearer) { ogs_error("No Bearer : EBI[%d]", ebi); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } @@ -3254,10 +3256,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (pti == OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED) { ogs_error("Both PTI[%d] and EBI[%d] are 0", pti, ebi); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } @@ -3272,10 +3275,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (!bearer) { ogs_error("No Bearer : Linked-EBI[%d]", linked_eps_bearer_identity->eps_bearer_identity); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } } else if (message->esm.h.message_type == @@ -3291,10 +3295,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (!bearer) { ogs_error("No Bearer : Linked-EBI[%d]", linked_eps_bearer_identity->eps_bearer_identity); - ogs_assert(OGS_OK == - nas_eps_send_bearer_resource_allocation_reject( + r = nas_eps_send_bearer_resource_allocation_reject( mme_ue, pti, - OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); + OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } @@ -3311,10 +3316,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (!bearer) { ogs_error("No Bearer : Linked-EBI[%d]", linked_eps_bearer_identity->eps_bearer_identity); - ogs_assert(OGS_OK == - nas_eps_send_bearer_resource_modification_reject( + r = nas_eps_send_bearer_resource_modification_reject( mme_ue, pti, - OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); + OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } } @@ -3335,11 +3341,12 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( sess = mme_sess_find_by_apn(mme_ue, pdn_connectivity_request->access_point_name.apn); if (sess && create_action != OGS_GTP_CREATE_IN_ATTACH_REQUEST) { - ogs_assert(OGS_OK == - nas_eps_send_pdn_connectivity_reject( + r = nas_eps_send_pdn_connectivity_reject( sess, OGS_NAS_ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED, - create_action)); + create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_warn("APN duplicated [%s]", pdn_connectivity_request->access_point_name.apn); return NULL; @@ -3359,10 +3366,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (!sess) { ogs_error("No Session : ESM message type[%d], PTI[%d]", message->esm.h.message_type, pti); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return NULL; } } diff --git a/src/mme/mme-gtp-path.c b/src/mme/mme-gtp-path.c index 1d601d9e9..883b6d548 100644 --- a/src/mme/mme-gtp-path.c +++ b/src/mme/mme-gtp-path.c @@ -76,6 +76,7 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data) static void timeout(ogs_gtp_xact_t *xact, void *data) { + int r; mme_ue_t *mme_ue = NULL; enb_ue_t *enb_ue = NULL; mme_sess_t *sess = NULL; @@ -131,10 +132,11 @@ static void timeout(ogs_gtp_xact_t *xact, void *data) enb_ue = enb_ue_cycle(mme_ue->enb_ue); if (enb_ue) { - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_warn("No S1 Context"); } diff --git a/src/mme/mme-path.c b/src/mme/mme-path.c index ea305769f..eb765ad60 100644 --- a/src/mme/mme-path.c +++ b/src/mme/mme-path.c @@ -26,6 +26,7 @@ void mme_send_delete_session_or_detach(mme_ue_t *mme_ue) { + int r; ogs_assert(mme_ue); switch (mme_ue->detach_type) { @@ -35,7 +36,9 @@ void mme_send_delete_session_or_detach(mme_ue_t *mme_ue) mme_gtp_send_delete_all_sessions( mme_ue, OGS_GTP_DELETE_SEND_DETACH_ACCEPT); } else { - ogs_assert(OGS_OK == nas_eps_send_detach_accept(mme_ue)); + r = nas_eps_send_detach_accept(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; @@ -94,6 +97,7 @@ void mme_send_delete_session_or_detach(mme_ue_t *mme_ue) void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue) { + int r; ogs_assert(mme_ue); if (SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) { @@ -102,10 +106,11 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue) } else { enb_ue_t *enb_ue = enb_ue_cycle(mme_ue->enb_ue); if (enb_ue) { - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_warn("[%s] No S1 Context", mme_ue->imsi_bcd); } @@ -114,6 +119,7 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue) void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue) { + int r; mme_ue_t *mme_ue = NULL; ogs_assert(enb_ue); @@ -125,15 +131,17 @@ void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue) mme_ue, OGS_GTP_RELEASE_SEND_UE_CONTEXT_RELEASE_COMMAND)); } else { ogs_debug("No UE Context"); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) { + int r; mme_bearer_t *bearer = NULL; ogs_assert(mme_ue); @@ -168,8 +176,9 @@ void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) mme_gtp_send_create_bearer_response( bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); } else { - ogs_assert(OGS_OK == - nas_eps_send_activate_dedicated_bearer_context_request(bearer)); + r = nas_eps_send_activate_dedicated_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; case MME_PAGING_TYPE_UPDATE_BEARER: @@ -190,12 +199,13 @@ void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) goto cleanup; } - ogs_assert(OGS_OK == - nas_eps_send_modify_bearer_context_request(bearer, + r = nas_eps_send_modify_bearer_context_request(bearer, (xact->update_flags & OGS_GTP_MODIFY_QOS_UPDATE) ? 1 : 0, (xact->update_flags & - OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0)); + OGS_GTP_MODIFY_TFT_UPDATE) ? 1 : 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; case MME_PAGING_TYPE_DELETE_BEARER: @@ -210,8 +220,9 @@ void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) mme_gtp_send_delete_bearer_response( bearer, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE)); } else { - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); + r = nas_eps_send_deactivate_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; case MME_PAGING_TYPE_CS_CALL_SERVICE: @@ -239,7 +250,9 @@ void mme_send_after_paging(mme_ue_t *mme_ue, bool failed) /* Nothing */ ogs_warn("MME-initiated Detach cannot be invoked"); } else { - ogs_assert(OGS_OK == nas_eps_send_detach_request(mme_ue)); + r = nas_eps_send_detach_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue)); } else { diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 50e784012..7763d94c8 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -81,7 +81,7 @@ void mme_s11_handle_create_session_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_create_session_response_t *rsp) { - int rv, i; + int i, r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; uint8_t bearer_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; @@ -151,8 +151,11 @@ void mme_s11_handle_create_session_response( if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("[%s] Attach reject [Cause:%d]", mme_ue->imsi_bcd, session_cause); - ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); + r = nas_eps_send_attach_reject(mme_ue, + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, + OGS_NAS_ESM_CAUSE_NETWORK_FAILURE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -216,9 +219,11 @@ void mme_s11_handle_create_session_response( if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("[%s] Attach reject [Cause:%d]", mme_ue->imsi_bcd, session_cause); - ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, - OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_ESM_CAUSE_NETWORK_FAILURE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -246,9 +251,11 @@ void mme_s11_handle_create_session_response( mme_ue->imsi_bcd, bearer_cause); if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, - OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); + OGS_NAS_ESM_CAUSE_NETWORK_FAILURE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -264,8 +271,11 @@ void mme_s11_handle_create_session_response( ogs_error("[%s] GTP Cause [VALUE:%d]", mme_ue->imsi_bcd, session_cause); if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); - ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, - OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE)); + r = nas_eps_send_attach_reject(mme_ue, + OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, + OGS_NAS_ESM_CAUSE_NETWORK_FAILURE); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -395,15 +405,17 @@ void mme_s11_handle_create_session_response( } else { ogs_assert(OGS_PDU_SESSION_TYPE_IS_VALID( session->paa.session_type)); - ogs_assert(OGS_OK == - nas_eps_send_attach_accept(mme_ue)); + r = nas_eps_send_attach_accept(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (create_action == OGS_GTP_CREATE_IN_UPLINK_NAS_TRANSPORT) { ogs_assert(OGS_PDU_SESSION_TYPE_IS_VALID(session->paa.session_type)); - ogs_assert(OGS_OK == - nas_eps_send_activate_default_bearer_context_request( - bearer, create_action)); + r = nas_eps_send_activate_default_bearer_context_request( + bearer, create_action); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (create_action == OGS_GTP_CREATE_IN_PATH_SWITCH_REQUEST) { GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_CREATE_SESSION_BY_PATH_SWITCH, @@ -411,7 +423,9 @@ void mme_s11_handle_create_session_response( mme_timer_cfg(MME_TIMER_S11_HOLDING)->duration); sgw_ue_associate_mme_ue(target_ue, mme_ue); - ogs_assert(OGS_OK == s1ap_send_path_switch_ack(mme_ue, true)); + r = s1ap_send_path_switch_ack(mme_ue, true); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ); } else { @@ -424,7 +438,7 @@ void mme_s11_handle_modify_bearer_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_modify_bearer_response_t *rsp) { - int rv; + int r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; int modify_action = 0; @@ -511,10 +525,14 @@ void mme_s11_handle_modify_bearer_response( switch (modify_action) { case OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST: - ogs_assert(OGS_OK == s1ap_send_path_switch_ack(mme_ue, false)); + r = s1ap_send_path_switch_ack(mme_ue, false); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; case OGS_GTP_MODIFY_IN_E_RAB_MODIFICATION: - ogs_assert(OGS_OK == s1ap_send_e_rab_modification_confirm(mme_ue)); + r = s1ap_send_e_rab_modification_confirm(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; default: break; @@ -525,7 +543,7 @@ void mme_s11_handle_delete_session_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_delete_session_response_t *rsp) { - int rv; + int r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; int action = 0; sgw_ue_t *source_ue = NULL, *target_ue = NULL; @@ -601,7 +619,9 @@ void mme_s11_handle_delete_session_response( } else if (action == OGS_GTP_DELETE_SEND_DETACH_ACCEPT) { if (mme_sess_count(mme_ue) == 1) /* Last Session */ { - ogs_assert(OGS_OK == nas_eps_send_detach_accept(mme_ue)); + r = nas_eps_send_detach_accept(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else if (action == @@ -609,8 +629,9 @@ void mme_s11_handle_delete_session_response( mme_bearer_t *bearer = mme_default_bearer_in_sess(sess); ogs_expect_or_return(bearer); - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); + r = nas_eps_send_deactivate_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* * mme_sess_remove() should not be called here. @@ -631,10 +652,11 @@ void mme_s11_handle_delete_session_response( } } else { ogs_assert(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, + r = s1ap_send_ue_context_release_command(mme_ue->enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -645,10 +667,11 @@ void mme_s11_handle_delete_session_response( enb_ue = enb_ue_cycle(mme_ue->enb_ue); if (enb_ue) { - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0)); + S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else ogs_error("ENB-S1 Context has already been removed"); } @@ -659,10 +682,11 @@ void mme_s11_handle_delete_session_response( &mme_ue->pdn_connectivity_request); if (rv != OGS_OK) { ogs_error("nas_eps_send_emm_to_esm() failed"); - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -701,6 +725,7 @@ void mme_s11_handle_create_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, ogs_gtp2_create_bearer_request_t *req) { + int r; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; mme_bearer_t *bearer = NULL, *default_bearer = NULL; mme_sess_t *sess = NULL; @@ -863,10 +888,13 @@ void mme_s11_handle_create_bearer_request( if (ECM_IDLE(mme_ue)) { MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_CREATE_BEARER, bearer); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == - nas_eps_send_activate_dedicated_bearer_context_request(bearer)); + r = nas_eps_send_activate_dedicated_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else { /* @@ -880,6 +908,7 @@ void mme_s11_handle_update_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, ogs_gtp2_update_bearer_request_t *req) { + int r; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; mme_bearer_t *bearer = NULL; mme_sess_t *sess = NULL; @@ -988,12 +1017,15 @@ void mme_s11_handle_update_bearer_request( if (ECM_IDLE(mme_ue)) { MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_UPDATE_BEARER, bearer); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == - nas_eps_send_modify_bearer_context_request(bearer, + r = nas_eps_send_modify_bearer_context_request(bearer, req->bearer_contexts.bearer_level_qos.presence, - req->bearer_contexts.tft.presence)); + req->bearer_contexts.tft.presence); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } else { ogs_error("[IGNORE] Update Bearer Request : " @@ -1001,10 +1033,11 @@ void mme_s11_handle_update_bearer_request( if (xact->xid & OGS_GTP_CMD_XACT_ID) { /* MME received Bearer Resource Modification Request */ - ogs_assert(OGS_OK == - nas_eps_send_bearer_resource_modification_reject( + r = nas_eps_send_bearer_resource_modification_reject( mme_ue, sess->pti, - OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED)); + OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } ogs_assert(OGS_OK == @@ -1017,6 +1050,7 @@ void mme_s11_handle_delete_bearer_request( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue, ogs_gtp2_delete_bearer_request_t *req) { + int r; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; mme_bearer_t *bearer = NULL; @@ -1121,10 +1155,13 @@ void mme_s11_handle_delete_bearer_request( if (ECM_IDLE(mme_ue)) { MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_DELETE_BEARER, bearer); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == - nas_eps_send_deactivate_bearer_context_request(bearer)); + r = nas_eps_send_deactivate_bearer_context_request(bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } @@ -1132,7 +1169,7 @@ void mme_s11_handle_release_access_bearers_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_release_access_bearers_response_t *rsp) { - int rv; + int r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; int action = 0; enb_ue_t *enb_ue = NULL; @@ -1197,10 +1234,11 @@ void mme_s11_handle_release_access_bearers_response( if (action == OGS_GTP_RELEASE_SEND_UE_CONTEXT_RELEASE_COMMAND) { enb_ue = enb_ue_cycle(mme_ue->enb_ue); if (enb_ue) { - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0)); + S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_error("ENB-S1 Context has already been removed"); } @@ -1232,9 +1270,11 @@ void mme_s11_handle_release_access_bearers_response( enb_ue_remove(enb_ue); - if (ogs_list_count(&enb->enb_ue_list) == 0) - ogs_assert(OGS_OK == - s1ap_send_s1_reset_ack(enb, NULL)); + if (ogs_list_count(&enb->enb_ue_list) == 0) { + r = s1ap_send_s1_reset_ack(enb, NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } } else { ogs_error("ENB-S1 Context has already been removed"); } @@ -1265,7 +1305,9 @@ void mme_s11_handle_release_access_bearers_response( * where PartOfS1_interface was requested * REMOVED */ ogs_assert(enb->s1_reset_ack); - s1ap_send_to_enb(enb, enb->s1_reset_ack, S1AP_NON_UE_SIGNALLING); + r = s1ap_send_to_enb(enb, enb->s1_reset_ack, S1AP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* Clear S1-Reset Ack Buffer */ enb->s1_reset_ack = NULL; @@ -1284,6 +1326,7 @@ void mme_s11_handle_downlink_data_notification( ogs_gtp2_downlink_data_notification_t *noti) { uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; + int r; mme_bearer_t *bearer = NULL; sgw_ue_t *sgw_ue = NULL; @@ -1370,7 +1413,9 @@ void mme_s11_handle_downlink_data_notification( if (ECM_IDLE(mme_ue)) { MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_DOWNLINK_DATA_NOTIFICATION, bearer); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (ECM_CONNECTED(mme_ue)) { if (cause_value == OGS_GTP2_CAUSE_ERROR_INDICATION_RECEIVED) { @@ -1406,10 +1451,11 @@ void mme_s11_handle_downlink_data_notification( enb_ue_t *enb_ue = enb_ue_cycle(mme_ue->enb_ue); ogs_assert(enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_PAGING, 0)); + S1AP_UE_CTX_REL_S1_PAGING, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_assert(OGS_OK == mme_gtp_send_downlink_data_notification_ack( @@ -1422,14 +1468,13 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp) { - int rv; + int i, r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; sgw_ue_t *sgw_ue = NULL; mme_bearer_t *bearer = NULL; mme_ue_t *mme_ue = NULL; enb_ue_t *source_ue = NULL; - int i; ogs_gtp2_f_teid_t *teid = NULL; @@ -1540,14 +1585,16 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( source_ue = enb_ue_cycle(mme_ue->enb_ue); ogs_assert(source_ue); - ogs_assert(OGS_OK == s1ap_send_handover_command(source_ue)); + r = s1ap_send_handover_command(source_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp) { - int rv; + int r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; uint8_t session_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE; int action = 0; @@ -1637,8 +1684,9 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( if (action == OGS_GTP_DELETE_INDIRECT_HANDOVER_COMPLETE) { /* Nothing to do */ } else if (action == OGS_GTP_DELETE_INDIRECT_HANDOVER_CANCEL) { - ogs_assert(OGS_OK == - s1ap_send_handover_cancel_ack(mme_ue->enb_ue)); + r = s1ap_send_handover_cancel_ack(mme_ue->enb_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_fatal("Invalid action = %d", action); ogs_assert_if_reached(); @@ -1649,7 +1697,7 @@ void mme_s11_handle_bearer_resource_failure_indication( ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid, ogs_gtp2_bearer_resource_failure_indication_t *ind) { - int rv; + int r, rv; uint8_t cause_value = OGS_GTP2_CAUSE_UNDEFINED_VALUE; mme_bearer_t *bearer = NULL; @@ -1700,9 +1748,10 @@ void mme_s11_handle_bearer_resource_failure_indication( ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", mme_ue->mme_s11_teid, sgw_ue->sgw_s11_teid); - ogs_assert(OGS_OK == - nas_eps_send_bearer_resource_modification_reject( - mme_ue, sess->pti, esm_cause_from_gtp(cause_value))); + r = nas_eps_send_bearer_resource_modification_reject( + mme_ue, sess->pti, esm_cause_from_gtp(cause_value)); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); if (!sgw_ue || cause_value == OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND) { diff --git a/src/mme/mme-s6a-handler.c b/src/mme/mme-s6a-handler.c index 8147d04a4..155bf58cd 100644 --- a/src/mme/mme-s6a-handler.c +++ b/src/mme/mme-s6a-handler.c @@ -39,6 +39,7 @@ static uint8_t mme_ue_session_from_slice_data(mme_ue_t *mme_ue, uint8_t mme_s6a_handle_aia( mme_ue_t *mme_ue, ogs_diam_s6a_message_t *s6a_message) { + int r; ogs_diam_s6a_aia_message_t *aia_message = NULL; ogs_diam_e_utran_vector_t *e_utran_vector = NULL; @@ -66,7 +67,9 @@ uint8_t mme_s6a_handle_aia( if (mme_ue->nas_eps.ksi == OGS_NAS_KSI_NO_KEY_IS_AVAILABLE) mme_ue->nas_eps.ksi = 0; - ogs_assert(OGS_OK == nas_eps_send_authentication_request(mme_ue)); + r = nas_eps_send_authentication_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return OGS_NAS_EMM_CAUSE_REQUEST_ACCEPTED; } @@ -77,7 +80,7 @@ uint8_t mme_s6a_handle_ula( ogs_diam_s6a_ula_message_t *ula_message = NULL; ogs_subscription_data_t *subscription_data = NULL; ogs_slice_data_t *slice_data = NULL; - int rv, num_of_session; + int r, rv, num_of_session; ogs_assert(mme_ue); ogs_assert(s6a_message); @@ -115,9 +118,10 @@ uint8_t mme_s6a_handle_ula( return OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED; } } else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST) { - ogs_assert(OGS_OK == - nas_eps_send_tau_accept(mme_ue, - S1AP_ProcedureCode_id_InitialContextSetup)); + r = nas_eps_send_tau_accept(mme_ue, + S1AP_ProcedureCode_id_InitialContextSetup); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { ogs_error("Invalid Type[%d]", mme_ue->nas_eps.type); return OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED; @@ -199,6 +203,7 @@ uint8_t mme_s6a_handle_idr( void mme_s6a_handle_clr(mme_ue_t *mme_ue, ogs_diam_s6a_message_t *s6a_message) { + int r; ogs_diam_s6a_clr_message_t *clr_message = NULL; ogs_assert(mme_ue); ogs_assert(s6a_message); @@ -260,9 +265,13 @@ void mme_s6a_handle_clr(mme_ue_t *mme_ue, ogs_diam_s6a_message_t *s6a_message) */ if (ECM_IDLE(mme_ue)) { MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_DETACH_TO_UE, NULL); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else { - ogs_assert(OGS_OK == nas_eps_send_detach_request(mme_ue)); + r = nas_eps_send_detach_request(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { ogs_assert(OGS_OK == sgsap_send_detach_indication(mme_ue)); } else { diff --git a/src/mme/mme-sm.c b/src/mme/mme-sm.c index caa19ab47..ee4dcfc20 100644 --- a/src/mme/mme-sm.c +++ b/src/mme/mme-sm.c @@ -62,7 +62,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) ogs_s1ap_message_t s1ap_message; ogs_pkbuf_t *pkbuf = NULL; - int rc; + int rc, r; ogs_nas_eps_message_t nas_message; enb_ue_t *enb_ue = NULL; @@ -196,10 +196,11 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) ogs_fsm_dispatch(&enb->sm, e); } else { ogs_warn("Cannot decode S1AP message"); - ogs_assert(OGS_OK == - s1ap_send_error_indication( + r = s1ap_send_error_indication( enb, NULL, NULL, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } ogs_s1ap_free(&s1ap_message); @@ -217,7 +218,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) pkbuf = e->pkbuf; ogs_assert(pkbuf); - ogs_expect(OGS_OK == s1ap_send_to_enb_ue(enb_ue, pkbuf)); + r = s1ap_send_to_enb_ue(enb_ue, pkbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_timer_delete(e->timer); break; case MME_TIMER_S1_HOLDING: @@ -251,11 +254,12 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) if (!mme_ue) { mme_ue = mme_ue_add(enb_ue); if (mme_ue == NULL) { - ogs_expect(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_misc, S1AP_CauseMisc_control_processing_overload, - S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_pkbuf_free(pkbuf); return; } @@ -296,10 +300,11 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) /* De-associate S1 with NAS/EMM */ enb_ue_deassociate(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, + r = s1ap_send_ue_context_release_command(mme_ue->enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } enb_ue_associate_mme_ue(enb_ue, mme_ue); } @@ -409,14 +414,16 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) ogs_error("S1 context has already been removed"); break; } - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, emm_cause, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + r = nas_eps_send_attach_reject(mme_ue, emm_cause, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; case OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION: @@ -429,14 +436,16 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) ogs_error("S1 context has already been removed"); break; } - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, emm_cause, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + r = nas_eps_send_attach_reject(mme_ue, emm_cause, + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(enb_ue, + r = s1ap_send_ue_context_release_command(enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } mme_ue->location_updated_but_not_canceled_yet = true; diff --git a/src/mme/nas-path.c b/src/mme/nas-path.c index 5989f2822..b26fbea85 100644 --- a/src/mme/nas-path.c +++ b/src/mme/nas-path.c @@ -28,16 +28,21 @@ int nas_eps_send_to_enb(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) { + int rv; + ogs_assert(pkbuf); mme_ue = mme_ue_cycle(mme_ue); if (!mme_ue) { - ogs_warn("UE(mme-ue) context has already been removed"); + ogs_error("UE(mme-ue) context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } - return s1ap_send_to_enb_ue(mme_ue->enb_ue, pkbuf); + rv = s1ap_send_to_enb_ue(mme_ue->enb_ue, pkbuf); + ogs_expect(rv == OGS_OK); + + return rv; } int nas_eps_send_emm_to_esm(mme_ue_t *mme_ue, @@ -75,20 +80,23 @@ int nas_eps_send_to_downlink_nas_transport(mme_ue_t *mme_ue, ogs_pkbuf_t *pkbuf) mme_ue = mme_ue_cycle(mme_ue); if (!mme_ue) { - ogs_warn("UE(mme-ue) context has already been removed"); + ogs_error("UE(mme-ue) context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } enb_ue = enb_ue_cycle(mme_ue->enb_ue); if (!enb_ue) { - ogs_warn("S1 context has already been removed"); + ogs_error("S1 context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } s1apbuf = s1ap_build_downlink_nas_transport(enb_ue, pkbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_downlink_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -116,19 +124,31 @@ int nas_eps_send_attach_accept(mme_ue_t *mme_ue) esmbuf = esm_build_activate_default_bearer_context_request( sess, OGS_GTP_CREATE_IN_ATTACH_REQUEST); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_activate_default_bearer_context_request() failed"); + return OGS_ERROR; + } emmbuf = emm_build_attach_accept(mme_ue, esmbuf); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_attach_accept() failed"); + return OGS_ERROR; + } CLEAR_MME_UE_TIMER(mme_ue->t3450); mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3450.pkbuf, OGS_ERROR); + if (!mme_ue->t3450.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3450.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3450.timer, mme_timer_cfg(MME_TIMER_T3450)->duration); s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, emmbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_initial_context_setup_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -143,7 +163,11 @@ int nas_eps_send_attach_reject(mme_ue_t *mme_ue, mme_sess_t *sess = NULL; ogs_pkbuf_t *esmbuf = NULL, *emmbuf = NULL; - ogs_expect_or_return_val(mme_ue, OGS_ERROR); + mme_ue = mme_ue_cycle(mme_ue); + if (!mme_ue) { + ogs_error("UE(mme-ue) context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] Attach reject", mme_ue->imsi_bcd); ogs_debug(" Cause[%d]", emm_cause); @@ -152,13 +176,19 @@ int nas_eps_send_attach_reject(mme_ue_t *mme_ue, if (sess) { esmbuf = esm_build_pdn_connectivity_reject( sess, esm_cause, OGS_GTP_CREATE_IN_ATTACH_REQUEST); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_pdn_connectivity_reject() failed"); + return OGS_ERROR; + } } emmbuf = emm_build_attach_reject(emm_cause, esmbuf); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_attach_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -174,19 +204,24 @@ int nas_eps_send_identity_request(mme_ue_t *mme_ue) if (mme_ue->t3470.pkbuf) { emmbuf = mme_ue->t3470.pkbuf; - ogs_expect_or_return_val(emmbuf, OGS_ERROR); } else { emmbuf = emm_build_identity_request(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_identity_request() failed"); + return OGS_ERROR; + } } mme_ue->t3470.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3470.pkbuf, OGS_ERROR); + if (!mme_ue->t3470.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3470.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3470.timer, mme_timer_cfg(MME_TIMER_T3470)->duration); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -202,19 +237,24 @@ int nas_eps_send_authentication_request(mme_ue_t *mme_ue) if (mme_ue->t3460.pkbuf) { emmbuf = mme_ue->t3460.pkbuf; - ogs_expect_or_return_val(emmbuf, OGS_ERROR); } else { emmbuf = emm_build_authentication_request(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_authentication_request() failed"); + return OGS_ERROR; + } } mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3460.pkbuf, OGS_ERROR); + if (!mme_ue->t3460.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3460.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3460.timer, mme_timer_cfg(MME_TIMER_T3460)->duration); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -230,19 +270,24 @@ int nas_eps_send_security_mode_command(mme_ue_t *mme_ue) if (mme_ue->t3460.pkbuf) { emmbuf = mme_ue->t3460.pkbuf; - ogs_expect_or_return_val(emmbuf, OGS_ERROR); } else { emmbuf = emm_build_security_mode_command(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_security_mode_command() failed"); + return OGS_ERROR; + } } mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3460.pkbuf, OGS_ERROR); + if (!mme_ue->t3460.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3460.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3460.timer, mme_timer_cfg(MME_TIMER_T3460)->duration); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -257,10 +302,13 @@ int nas_eps_send_authentication_reject(mme_ue_t *mme_ue) ogs_debug("[%s] Authentication reject", mme_ue->imsi_bcd); emmbuf = emm_build_authentication_reject(); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_authentication_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -274,19 +322,24 @@ int nas_eps_send_detach_request(mme_ue_t *mme_ue) if (mme_ue->t3422.pkbuf) { emmbuf = mme_ue->t3422.pkbuf; - ogs_expect_or_return_val(emmbuf, OGS_ERROR); } else { emmbuf = emm_build_detach_request(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_detach_request() failed"); + return OGS_ERROR; + } } mme_ue->t3422.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3422.pkbuf, OGS_ERROR); + if (!mme_ue->t3422.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3422.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3422.timer, mme_timer_cfg(MME_TIMER_T3422)->duration); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -300,17 +353,26 @@ int nas_eps_send_detach_accept(mme_ue_t *mme_ue) ogs_assert(mme_ue); enb_ue = enb_ue_cycle(mme_ue->enb_ue); - ogs_expect_or_return_val(enb_ue, OGS_ERROR); + if (!enb_ue) { + ogs_error("S1 context has already been removed"); + return OGS_NOTFOUND; + } ogs_debug("[%s] Detach accept", mme_ue->imsi_bcd); /* reply with detach accept */ if (mme_ue->nas_eps.detach.switch_off == 0) { emmbuf = emm_build_detach_accept(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_detach_accept() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("nas_eps_send_to_downlink_nas_transport() failed"); + return rv; + } } rv = s1ap_send_ue_context_release_command(enb_ue, @@ -333,28 +395,29 @@ int nas_eps_send_pdn_connectivity_reject( ogs_assert(mme_ue); if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { - enb_ue_t *enb_ue = NULL; - /* During the UE-attach process, we'll send Attach-Reject * with pyggybacking PDN-connectivity-Reject */ rv = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_ESM_FAILURE, esm_cause); - ogs_expect(rv == OGS_OK); - - enb_ue = enb_ue_cycle(mme_ue->enb_ue); - if (enb_ue) { - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, - S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0)); + if (rv != OGS_OK) { + ogs_error("nas_eps_send_attach_reject() failed"); + return rv; } + + rv = s1ap_send_ue_context_release_command(mme_ue->enb_ue, + S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, + S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0); + ogs_expect(rv == OGS_OK); } else { esmbuf = esm_build_pdn_connectivity_reject( sess, esm_cause, create_action); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_pdn_connectivity_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); } return rv; @@ -372,19 +435,24 @@ int nas_eps_send_esm_information_request(mme_bearer_t *bearer) if (bearer->t3489.pkbuf) { esmbuf = bearer->t3489.pkbuf; - ogs_expect_or_return_val(esmbuf, OGS_ERROR); } else { esmbuf = esm_build_information_request(bearer); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_information_request() failed"); + return OGS_ERROR; + } } bearer->t3489.pkbuf = ogs_pkbuf_copy(esmbuf); - ogs_expect_or_return_val(bearer->t3489.pkbuf, OGS_ERROR); + if (!bearer->t3489.pkbuf) { + ogs_error("ogs_pkbuf_copy(bearer->t3489) failed"); + return OGS_ERROR; + } ogs_timer_start(bearer->t3489.timer, mme_timer_cfg(MME_TIMER_T3489)->duration); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -406,10 +474,16 @@ int nas_eps_send_activate_default_bearer_context_request( esmbuf = esm_build_activate_default_bearer_context_request( sess, create_action); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_activate_default_bearer_context_request() failed"); + return OGS_ERROR; + } s1apbuf = s1ap_build_e_rab_setup_request(bearer, esmbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_e_rab_setup_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -430,10 +504,17 @@ int nas_eps_send_activate_dedicated_bearer_context_request( ogs_assert(mme_ue); esmbuf = esm_build_activate_dedicated_bearer_context_request(bearer); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error( + "esm_build_activate_dedicated_bearer_context_request() failed"); + return OGS_ERROR; + } s1apbuf = s1ap_build_e_rab_setup_request(bearer, esmbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_e_rab_setup_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -443,12 +524,15 @@ int nas_eps_send_activate_dedicated_bearer_context_request( void nas_eps_send_activate_all_dedicated_bearers(mme_bearer_t *default_bearer) { + int r; ogs_assert(default_bearer); mme_bearer_t *dedicated_bearer = mme_bearer_next(default_bearer); while (dedicated_bearer) { - nas_eps_send_activate_dedicated_bearer_context_request( + r = nas_eps_send_activate_dedicated_bearer_context_request( dedicated_bearer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); dedicated_bearer = mme_bearer_next(dedicated_bearer); } } @@ -467,17 +551,23 @@ int nas_eps_send_modify_bearer_context_request( esmbuf = esm_build_modify_bearer_context_request( bearer, qos_presence, tft_presence); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_modify_bearer_context_request() failed"); + return OGS_ERROR; + } if (qos_presence == 1) { s1apbuf = s1ap_build_e_rab_modify_request(bearer, esmbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_e_rab_modify_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); } else { rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); } return rv; @@ -496,11 +586,17 @@ int nas_eps_send_deactivate_bearer_context_request(mme_bearer_t *bearer) esmbuf = esm_build_deactivate_bearer_context_request( bearer, OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_deactivate_bearer_context_request() failed"); + return OGS_ERROR; + } s1apbuf = s1ap_build_e_rab_release_command(bearer, esmbuf, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_e_rab_release_command() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -519,10 +615,13 @@ int nas_eps_send_bearer_resource_allocation_reject( esmbuf = esm_build_bearer_resource_allocation_reject( mme_ue, pti, esm_cause); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_bearer_resource_allocation_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -538,10 +637,13 @@ int nas_eps_send_bearer_resource_modification_reject( esmbuf = esm_build_bearer_resource_modification_reject( mme_ue, pti, esm_cause); - ogs_expect_or_return_val(esmbuf, OGS_ERROR); + if (!esmbuf) { + ogs_error("esm_build_bearer_resource_modification_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -557,12 +659,18 @@ int nas_eps_send_tau_accept( ogs_debug("[%s] Tracking area update accept", mme_ue->imsi_bcd); emmbuf = emm_build_tau_accept(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_tau_accept() failed"); + return OGS_ERROR; + } if (mme_ue->next.m_tmsi) { CLEAR_MME_UE_TIMER(mme_ue->t3450); mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_expect_or_return_val(mme_ue->t3450.pkbuf, OGS_ERROR); + if (!mme_ue->t3450.pkbuf) { + ogs_error("ogs_pkbuf_copy(mme_ue->t3450.pkbuf) failed"); + return OGS_ERROR; + } ogs_timer_start(mme_ue->t3450.timer, mme_timer_cfg(MME_TIMER_T3450)->duration); } @@ -570,13 +678,16 @@ int nas_eps_send_tau_accept( if (procedureCode == S1AP_ProcedureCode_id_InitialContextSetup) { ogs_pkbuf_t *s1apbuf = NULL; s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, emmbuf); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_initial_context_setup_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); } else if (procedureCode == S1AP_ProcedureCode_id_downlinkNASTransport) { rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); } else ogs_assert_if_reached(); @@ -594,10 +705,13 @@ int nas_eps_send_tau_reject(mme_ue_t *mme_ue, ogs_nas_emm_cause_t emm_cause) /* Build TAU reject */ emmbuf = emm_build_tau_reject(emm_cause, mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_tau_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -614,10 +728,13 @@ int nas_eps_send_service_reject(mme_ue_t *mme_ue, /* Build Service Reject */ emmbuf = emm_build_service_reject(emm_cause, mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_service_reject() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -632,10 +749,13 @@ int nas_eps_send_cs_service_notification(mme_ue_t *mme_ue) ogs_debug("[%s] CS Service Notification", mme_ue->imsi_bcd); emmbuf = emm_build_cs_service_notification(mme_ue); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_cs_service_notification() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } @@ -653,10 +773,13 @@ int nas_eps_send_downlink_nas_transport( ogs_debug("[%s] Downlink NAS transport", mme_ue->imsi_bcd); emmbuf = emm_build_downlink_nas_transport(mme_ue, buffer, length); - ogs_expect_or_return_val(emmbuf, OGS_ERROR); + if (!emmbuf) { + ogs_error("emm_build_downlink_nas_transport() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_downlink_nas_transport(mme_ue, emmbuf); - ogs_expect_or_return_val(rv == OGS_OK, rv); + ogs_expect(rv == OGS_OK); return rv; } diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index bbe57c4ad..6b524dced 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -68,7 +68,7 @@ static bool maximum_number_of_enbs_is_reached(void) void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i, j; + int i, j, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_S1SetupRequest_t *S1SetupRequest = NULL; @@ -163,7 +163,9 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) group = S1AP_Cause_PR_misc; cause = S1AP_CauseMisc_unspecified; - ogs_assert(OGS_OK == s1ap_send_s1_setup_failure(enb, group, cause)); + r = s1ap_send_s1_setup_failure(enb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -173,7 +175,9 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) group = S1AP_Cause_PR_misc; cause = S1AP_CauseMisc_unspecified; - ogs_assert(OGS_OK == s1ap_send_s1_setup_failure(enb, group, cause)); + r = s1ap_send_s1_setup_failure(enb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -183,17 +187,21 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) group = S1AP_Cause_PR_misc; cause = S1AP_CauseMisc_unknown_PLMN; - ogs_assert(OGS_OK == s1ap_send_s1_setup_failure(enb, group, cause)); + r = s1ap_send_s1_setup_failure(enb, group, cause); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb->state.s1_setup_success = true; - ogs_assert(OGS_OK == s1ap_send_s1_setup_response(enb)); + r = s1ap_send_s1_setup_response(enb); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) { - int i; + int i, r; char buf[OGS_ADDRSTRLEN]; S1AP_InitiatingMessage_t *initiatingMessage = NULL; @@ -251,19 +259,21 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, *ENB_UE_S1AP_ID); if (!enb_ue) { enb_ue = enb_ue_add(enb, *ENB_UE_S1AP_ID); if (enb_ue == NULL) { - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, NULL, + r = s1ap_send_error_indication(enb, NULL, NULL, S1AP_Cause_PR_misc, - S1AP_CauseMisc_control_processing_overload)); + S1AP_CauseMisc_control_processing_overload); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -313,10 +323,11 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) /* De-associate S1 with NAS/EMM */ enb_ue_deassociate(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(mme_ue->enb_ue, + r = s1ap_send_ue_context_release_command(mme_ue->enb_ue, S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release, - S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0)); + S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } enb_ue_associate_mme_ue(enb_ue, mme_ue); } @@ -325,25 +336,28 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!NAS_PDU) { ogs_error("No NAS_PDU"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!TAI) { ogs_error("No TAI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!EUTRAN_CGI) { ogs_error("No EUTRAN_CGI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -371,15 +385,17 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, ogs_s1ap_message_t *message) enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, enb_ue->saved.tai.tac, enb_ue->saved.e_cgi.cell_id); - s1ap_send_to_nas(enb_ue, + r = s1ap_send_to_nas(enb_ue, S1AP_ProcedureCode_id_initialUEMessage, NAS_PDU); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_uplink_nas_transport( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_UplinkNASTransport_t *UplinkNASTransport = NULL; @@ -436,9 +452,10 @@ void s1ap_handle_uplink_nas_transport( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -446,18 +463,20 @@ void s1ap_handle_uplink_nas_transport( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -466,25 +485,28 @@ void s1ap_handle_uplink_nas_transport( if (!NAS_PDU) { ogs_error("No NAS_PDU"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!EUTRAN_CGI) { ogs_error("No EUTRAN_CGI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!TAI) { ogs_error("No TAI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -524,15 +546,17 @@ void s1ap_handle_uplink_nas_transport( ogs_assert_if_reached(); } - s1ap_send_to_nas(enb_ue, + r = s1ap_send_to_nas(enb_ue, S1AP_ProcedureCode_id_uplinkNASTransport, NAS_PDU); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_ue_capability_info_indication( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_UECapabilityInfoIndication_t *UECapabilityInfoIndication = NULL; @@ -578,9 +602,10 @@ void s1ap_handle_ue_capability_info_indication( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -588,18 +613,20 @@ void s1ap_handle_ue_capability_info_indication( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -616,9 +643,8 @@ void s1ap_handle_ue_capability_info_indication( void s1ap_handle_initial_context_setup_response( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; + int i, r, rv; char buf[OGS_ADDRSTRLEN]; - int i; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_InitialContextSetupResponse_t *InitialContextSetupResponse = NULL; @@ -666,9 +692,10 @@ void s1ap_handle_initial_context_setup_response( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -676,18 +703,20 @@ void s1ap_handle_initial_context_setup_response( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -695,7 +724,10 @@ void s1ap_handle_initial_context_setup_response( enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (E_RABSetupListCtxtSURes) { int uli_presence = 0; @@ -712,28 +744,31 @@ void s1ap_handle_initial_context_setup_response( E_RABSetupListCtxtSURes->list.array[i]; if (!item) { ogs_error("No S1AP_E_RABSetupItemCtxtSUResIEs_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } e_rab = &item->value.choice.E_RABSetupItemCtxtSURes; if (!e_rab) { ogs_error("No E_RABSetupItemCtxtSURes"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } bearer = mme_bearer_find_by_ue_ebi(mme_ue, e_rab->e_RAB_ID); if (!bearer) { ogs_error("No Bearer [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_E_RAB_ID)); + S1AP_CauseRadioNetwork_unknown_E_RAB_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -745,10 +780,11 @@ void s1ap_handle_initial_context_setup_response( if (rv != OGS_OK) { ogs_error("No transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -780,7 +816,7 @@ void s1ap_handle_initial_context_setup_failure( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_InitialContextSetupFailure_t *InitialContextSetupFailure = NULL; @@ -827,9 +863,10 @@ void s1ap_handle_initial_context_setup_failure( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -837,18 +874,20 @@ void s1ap_handle_initial_context_setup_failure( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -857,9 +896,10 @@ void s1ap_handle_initial_context_setup_failure( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -894,7 +934,7 @@ void s1ap_handle_ue_context_modification_response( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_UEContextModificationResponse_t *UEContextModificationResponse = NULL; @@ -938,9 +978,10 @@ void s1ap_handle_ue_context_modification_response( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -948,18 +989,20 @@ void s1ap_handle_ue_context_modification_response( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -967,7 +1010,10 @@ void s1ap_handle_ue_context_modification_response( enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } CLEAR_SERVICE_INDICATOR(mme_ue); } @@ -976,7 +1022,7 @@ void s1ap_handle_ue_context_modification_failure( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_UEContextModificationFailure_t *UEContextModificationFailure = NULL; @@ -1023,9 +1069,10 @@ void s1ap_handle_ue_context_modification_failure( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1033,18 +1080,20 @@ void s1ap_handle_ue_context_modification_failure( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1053,9 +1102,10 @@ void s1ap_handle_ue_context_modification_failure( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1063,7 +1113,10 @@ void s1ap_handle_ue_context_modification_failure( Cause->present, (int)Cause->choice.radioNetwork); mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } CLEAR_SERVICE_INDICATOR(mme_ue); } @@ -1071,9 +1124,8 @@ void s1ap_handle_ue_context_modification_failure( void s1ap_handle_e_rab_setup_response( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; + int i, r, rv; char buf[OGS_ADDRSTRLEN]; - int i; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_E_RABSetupResponse_t *E_RABSetupResponse = NULL; @@ -1130,9 +1182,10 @@ void s1ap_handle_e_rab_setup_response( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1140,18 +1193,20 @@ void s1ap_handle_e_rab_setup_response( if (!enb_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1159,7 +1214,10 @@ void s1ap_handle_e_rab_setup_response( enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (E_RABSetupListBearerSURes) { for (i = 0; i < E_RABSetupListBearerSURes->list.count; i++) { @@ -1172,30 +1230,33 @@ void s1ap_handle_e_rab_setup_response( E_RABSetupListBearerSURes->list.array[i]; if (!item) { ogs_error("No S1AP_E_RABSetupItemBearerSUResIEs_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_semantic_error)); + S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } e_rab = &item->value.choice.E_RABSetupItemBearerSURes; if (!e_rab) { ogs_error("No E_RABSetupItemBearerSURes"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_semantic_error)); + S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } bearer = mme_bearer_find_by_ue_ebi(mme_ue, e_rab->e_RAB_ID); if (!bearer) { ogs_error("No Bearer [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_E_RAB_ID)); + S1AP_CauseRadioNetwork_unknown_E_RAB_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1207,10 +1268,11 @@ void s1ap_handle_e_rab_setup_response( if (rv != OGS_OK) { ogs_error("No transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1244,10 +1306,11 @@ void s1ap_handle_e_rab_setup_response( if (!item) { ogs_error("No S1AP_E_RABItem_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_semantic_error)); + S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1279,7 +1342,7 @@ void s1ap_handle_ue_context_release_request( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_UEContextReleaseRequest_t *UEContextReleaseRequest = NULL; @@ -1325,20 +1388,22 @@ void s1ap_handle_ue_context_release_request( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb_ue = enb_ue_find_by_mme_ue_s1ap_id(*MME_UE_S1AP_ID); if (!enb_ue) { ogs_warn("No ENB UE Context : MME_UE_S1AP_ID[%d]", (int)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1347,9 +1412,10 @@ void s1ap_handle_ue_context_release_request( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1377,7 +1443,7 @@ void s1ap_handle_ue_context_release_complete( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_UEContextReleaseComplete_t *UEContextReleaseComplete = NULL; @@ -1419,20 +1485,22 @@ void s1ap_handle_ue_context_release_complete( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb_ue = enb_ue_find_by_mme_ue_s1ap_id(*MME_UE_S1AP_ID); if (!enb_ue) { ogs_warn("No ENB UE Context : MME_UE_S1AP_ID[%d]", (int)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1441,6 +1509,7 @@ void s1ap_handle_ue_context_release_complete( void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) { + int r; mme_ue_t *mme_ue = NULL; ogs_assert(enb_ue); @@ -1477,13 +1546,19 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) case S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK: ogs_debug(" Action: S1 normal release"); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } enb_ue_unlink(mme_ue); break; case S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE: ogs_debug(" Action: UE context remove"); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (mme_ue->location_updated_but_not_canceled_yet == true) { mme_s6a_send_pur(mme_ue); @@ -1498,7 +1573,10 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) enb_ue_source_deassociate_target(enb_ue); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (mme_ue_have_indirect_tunnel(mme_ue) == true) { ogs_assert(OGS_OK == mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( @@ -1516,7 +1594,10 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) enb_ue_source_deassociate_target(enb_ue); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (mme_ue_have_indirect_tunnel(mme_ue) == true) { ogs_assert(OGS_OK == mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( @@ -1527,9 +1608,13 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) ogs_warn(" Packet could be dropped during S1-Handover"); mme_ue_clear_indirect_tunnel(mme_ue); - ogs_expect_or_return(mme_ue->enb_ue); - ogs_assert(OGS_OK == - s1ap_send_handover_cancel_ack(mme_ue->enb_ue)); + if (!mme_ue->enb_ue) { + ogs_error("No S1 context"); + return; + } + r = s1ap_send_handover_cancel_ack(mme_ue->enb_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } break; case S1AP_UE_CTX_REL_S1_HANDOVER_FAILURE: @@ -1538,7 +1623,10 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) enb_ue_source_deassociate_target(enb_ue); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (mme_ue_have_indirect_tunnel(mme_ue) == true) { ogs_error("Check your eNodeB"); ogs_error(" We found INDIRECT TUNNEL in HandoverFailure"); @@ -1548,10 +1636,15 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue) case S1AP_UE_CTX_REL_S1_PAGING: ogs_debug(" Action: S1 paging"); enb_ue_remove(enb_ue); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } enb_ue_unlink(mme_ue); - ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); break; default: ogs_error("Invalid Action[%d]", enb_ue->ue_ctx_rel_action); @@ -1563,7 +1656,7 @@ void s1ap_handle_e_rab_modification_indication( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int rv, i; + int i, r, rv; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_E_RABModificationIndication_t *E_RABModificationIndication = NULL; @@ -1611,28 +1704,31 @@ void s1ap_handle_e_rab_modification_indication( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb_ue = enb_ue_find_by_mme_ue_s1ap_id(*MME_UE_S1AP_ID); if (!enb_ue) { ogs_warn("No ENB UE Context : MME_UE_S1AP_ID[%d]", (int)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1641,14 +1737,18 @@ void s1ap_handle_e_rab_modification_indication( if (!E_RABToBeModifiedListBearerModInd) { ogs_error("No E_RABToBeModifiedListBearerModInd"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_list_init(&mme_ue->bearer_to_modify_list); @@ -1662,28 +1762,31 @@ void s1ap_handle_e_rab_modification_indication( E_RABToBeModifiedListBearerModInd->list.array[i]; if (!item) { ogs_error("No S1AP_E_RABToBeModifiedItemBearerModIndIEs_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } e_rab = &item->value.choice.E_RABToBeModifiedItemBearerModInd; if (!e_rab) { ogs_error("No E_RABToBeModifiedItemBearerModInd"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } bearer = mme_bearer_find_by_ue_ebi(mme_ue, e_rab->e_RAB_ID); if (!bearer) { ogs_error("No Bearer [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_E_RAB_ID)); + S1AP_CauseRadioNetwork_unknown_E_RAB_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1695,10 +1798,11 @@ void s1ap_handle_e_rab_modification_indication( if (rv != OGS_OK) { ogs_error("No transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1714,9 +1818,8 @@ void s1ap_handle_e_rab_modification_indication( void s1ap_handle_path_switch_request( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; + int i, r, rv; char buf[OGS_ADDRSTRLEN]; - int i; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_PathSwitchRequest_t *PathSwitchRequest = NULL; @@ -1786,16 +1889,18 @@ void s1ap_handle_path_switch_request( if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } enb_ue = enb_ue_find_by_mme_ue_s1ap_id(*MME_UE_S1AP_ID); @@ -1808,10 +1913,14 @@ void s1ap_handle_path_switch_request( *ENB_UE_S1AP_ID, *MME_UE_S1AP_ID, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); - ogs_expect_or_return(s1apbuf); + if (!s1apbuf) { + ogs_error("s1ap_build_path_switch_failure() failed"); + return; + } - ogs_expect(OGS_OK == - s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING)); + r = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1820,9 +1929,10 @@ void s1ap_handle_path_switch_request( if (!EUTRAN_CGI) { ogs_error("No EUTRAN_CGI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1833,9 +1943,10 @@ void s1ap_handle_path_switch_request( if (!TAI) { ogs_error("No TAI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1846,23 +1957,32 @@ void s1ap_handle_path_switch_request( if (!E_RABToBeSwitchedDLList) { ogs_error("No E_RABToBeSwitchedDLList"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } mme_ue = enb_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (!SECURITY_CONTEXT_IS_VALID(mme_ue)) { ogs_error("No Security Context"); s1apbuf = s1ap_build_path_switch_failure( *ENB_UE_S1AP_ID, *MME_UE_S1AP_ID, S1AP_Cause_PR_nas, S1AP_CauseNas_authentication_failure); - ogs_expect_or_return(s1apbuf); + if (!s1apbuf) { + ogs_error("s1ap_build_path_switch_failure() failed"); + return; + } - s1ap_send_to_enb_ue(enb_ue, s1apbuf); + r = s1ap_send_to_enb_ue(enb_ue, s1apbuf); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1940,28 +2060,31 @@ void s1ap_handle_path_switch_request( E_RABToBeSwitchedDLList->list.array[i]; if (!item) { ogs_error("No S1AP_E_RABToBeSwitchedDLItemIEs_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } e_rab = &item->value.choice.E_RABToBeSwitchedDLItem; if (!e_rab) { ogs_error("No E_RABToBeSwitchedDLItem"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } bearer = mme_bearer_find_by_ue_ebi(mme_ue, e_rab->e_RAB_ID); if (!bearer) { ogs_error("No Bearer [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_E_RAB_ID)); + S1AP_CauseRadioNetwork_unknown_E_RAB_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -1973,10 +2096,11 @@ void s1ap_handle_path_switch_request( if (rv != OGS_OK) { ogs_error("No transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2011,7 +2135,7 @@ void s1ap_handle_enb_configuration_transfer( mme_enb_t *enb, ogs_s1ap_message_t *message, ogs_pkbuf_t *pkbuf) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_ENBConfigurationTransfer_t *ENBConfigurationTransfer = NULL; @@ -2084,23 +2208,25 @@ void s1ap_handle_enb_configuration_transfer( if (target_enb == NULL) { ogs_error("eNB configuration transfer : " "cannot find target eNB-id[0x%x]", target_enb_id); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, NULL, + r = s1ap_send_error_indication(enb, NULL, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_targetID)); + S1AP_CauseRadioNetwork_unknown_targetID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } - ogs_assert(OGS_OK == - s1ap_send_mme_configuration_transfer( - target_enb, SONConfigurationTransfer)); + r = s1ap_send_mme_configuration_transfer( + target_enb, SONConfigurationTransfer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_HandoverRequired_t *HandoverRequired = NULL; @@ -2161,9 +2287,10 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2171,18 +2298,20 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!source_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2191,33 +2320,37 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!HandoverType) { ogs_error("No HandoverType"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!TargetID) { ogs_error("No TargetID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Source_ToTarget_TransparentContainer) { ogs_error("No Source_ToTarget_TransparentContainer"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2229,9 +2362,10 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) break; default: ogs_error("Not implemented(%d)", TargetID->present); - ogs_assert(OGS_OK == - s1ap_send_handover_preparation_failure(source_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_handover_preparation_failure(source_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2239,21 +2373,26 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) if (target_enb == NULL) { ogs_error("Handover required : cannot find target eNB-id[0x%x]", target_enb_id); - ogs_assert(OGS_OK == - s1ap_send_handover_preparation_failure(source_ue, + r = s1ap_send_handover_preparation_failure(source_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_targetID)); + S1AP_CauseRadioNetwork_unknown_targetID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } mme_ue = source_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } if (!SECURITY_CONTEXT_IS_VALID(mme_ue)) { ogs_error("No Security Context"); - ogs_assert(OGS_OK == - s1ap_send_handover_preparation_failure(source_ue, - S1AP_Cause_PR_nas, S1AP_CauseNas_authentication_failure)); + r = s1ap_send_handover_preparation_failure(source_ue, + S1AP_Cause_PR_nas, S1AP_CauseNas_authentication_failure); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2262,18 +2401,18 @@ void s1ap_handle_handover_required(mme_enb_t *enb, ogs_s1ap_message_t *message) mme_ue->nhcc++; ogs_kdf_nh_enb(mme_ue->kasme, mme_ue->nh, mme_ue->nh); - ogs_assert(OGS_OK == - s1ap_send_handover_request( + r = s1ap_send_handover_request( source_ue, target_enb, HandoverType, Cause, - Source_ToTarget_TransparentContainer)); + Source_ToTarget_TransparentContainer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_handover_request_ack( mme_enb_t *enb, ogs_s1ap_message_t *message) { - int rv; + int i, r, rv; char buf[OGS_ADDRSTRLEN]; - int i; S1AP_SuccessfulOutcome_t *successfulOutcome = NULL; S1AP_HandoverRequestAcknowledge_t *HandoverRequestAcknowledge = NULL; @@ -2326,9 +2465,10 @@ void s1ap_handle_handover_request_ack( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2336,48 +2476,56 @@ void s1ap_handle_handover_request_ack( if (!target_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!E_RABAdmittedList) { ogs_error("No E_RABAdmittedList"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Target_ToSource_TransparentContainer) { ogs_error("No Target_ToSource_TransparentContainer"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } source_ue = target_ue->source_ue; if (!source_ue) { ogs_error("No Source UE"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } mme_ue = source_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_debug(" Source : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", source_ue->enb_ue_s1ap_id, source_ue->mme_ue_s1ap_id); @@ -2395,28 +2543,31 @@ void s1ap_handle_handover_request_ack( item = (S1AP_E_RABAdmittedItemIEs_t *)E_RABAdmittedList->list.array[i]; if (!item) { ogs_error("No S1AP_E_RABAdmittedItemIEs_t"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } e_rab = &item->value.choice.E_RABAdmittedItem; if (!e_rab) { ogs_error("No E_RABAdmittedItem"); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication2(mme_ue, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } bearer = mme_bearer_find_by_ue_ebi(mme_ue, e_rab->e_RAB_ID); if (!bearer) { ogs_error("No Bearer [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_E_RAB_ID)); + S1AP_CauseRadioNetwork_unknown_E_RAB_ID); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2428,10 +2579,11 @@ void s1ap_handle_handover_request_ack( if (rv != OGS_OK) { ogs_error("No transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2446,10 +2598,11 @@ void s1ap_handle_handover_request_ack( if (rv != OGS_OK) { ogs_error("No dL_transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } } @@ -2465,10 +2618,11 @@ void s1ap_handle_handover_request_ack( if (rv != OGS_OK) { ogs_error("No uL_transportLayerAddress [%d]", (int)e_rab->e_RAB_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication2(mme_ue, + r = s1ap_send_error_indication2(mme_ue, S1AP_Cause_PR_protocol, - S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message)); + S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } } @@ -2482,15 +2636,16 @@ void s1ap_handle_handover_request_ack( mme_gtp_send_create_indirect_data_forwarding_tunnel_request(mme_ue)\ ); } else { - ogs_assert(OGS_OK == - s1ap_send_handover_command(source_ue)); + r = s1ap_send_handover_command(source_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_UnsuccessfulOutcome_t *unsuccessfulOutcome = NULL; S1AP_HandoverFailure_t *HandoverFailure = NULL; @@ -2531,9 +2686,10 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2541,27 +2697,30 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!target_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } source_ue = target_ue->source_ue; if (!source_ue) { ogs_error("No Source UE"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2570,21 +2729,23 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - ogs_assert(OGS_OK == - s1ap_send_handover_preparation_failure( - source_ue, Cause->present, Cause->choice.radioNetwork)); + r = s1ap_send_handover_preparation_failure( + source_ue, Cause->present, Cause->choice.radioNetwork); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command( + r = s1ap_send_ue_context_release_command( target_ue, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system, - S1AP_UE_CTX_REL_S1_HANDOVER_FAILURE, 0)); + S1AP_UE_CTX_REL_S1_HANDOVER_FAILURE, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_HandoverCancel_t *HandoverCancel = NULL; @@ -2629,9 +2790,10 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2639,35 +2801,39 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) if (!source_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } target_ue = source_ue->target_ue; if (!target_ue) { ogs_error("No Target UE"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2676,11 +2842,12 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message) ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command( + r = s1ap_send_ue_context_release_command( target_ue, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_handover_cancelled, - S1AP_UE_CTX_REL_S1_HANDOVER_CANCEL, 0)); + S1AP_UE_CTX_REL_S1_HANDOVER_CANCEL, 0); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_debug("Handover Cancel : UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]", source_ue->enb_ue_s1ap_id, @@ -2691,7 +2858,7 @@ void s1ap_handle_enb_status_transfer( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_ENBStatusTransfer_t *ENBStatusTransfer = NULL; @@ -2736,9 +2903,10 @@ void s1ap_handle_enb_status_transfer( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2746,35 +2914,39 @@ void s1ap_handle_enb_status_transfer( if (!source_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_StatusTransfer_TransparentContainer) { ogs_error("No ENB_StatusTransfer_TransparentContainer"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } target_ue = source_ue->target_ue; if (!target_ue) { ogs_error("No Target UE"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2783,16 +2955,17 @@ void s1ap_handle_enb_status_transfer( ogs_debug(" Target : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", target_ue->enb_ue_s1ap_id, target_ue->mme_ue_s1ap_id); - ogs_assert(OGS_OK == - s1ap_send_mme_status_transfer(target_ue, - ENB_StatusTransfer_TransparentContainer)); + r = s1ap_send_mme_status_transfer(target_ue, + ENB_StatusTransfer_TransparentContainer); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void s1ap_handle_handover_notification( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_HandoverNotify_t *HandoverNotify = NULL; @@ -2847,9 +3020,10 @@ void s1ap_handle_handover_notification( if (!MME_UE_S1AP_ID) { ogs_error("No MME_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2857,26 +3031,29 @@ void s1ap_handle_handover_notification( if (!target_ue) { ogs_error("No eNB UE Context : MME_UE_S1AP_ID[%lld]", (long long)*MME_UE_S1AP_ID); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, NULL, S1AP_Cause_PR_radioNetwork, - S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id)); + S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!ENB_UE_S1AP_ID) { ogs_error("No ENB_UE_S1AP_ID"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } if (!EUTRAN_CGI) { ogs_error("No EUTRAN_CGI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2887,9 +3064,10 @@ void s1ap_handle_handover_notification( if (!TAI) { ogs_error("No TAI"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -2901,14 +3079,18 @@ void s1ap_handle_handover_notification( source_ue = target_ue->source_ue; if (!source_ue) { ogs_error("No Source UE"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, MME_UE_S1AP_ID, ENB_UE_S1AP_ID, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } mme_ue = source_ue->mme_ue; - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_debug(" Source : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", source_ue->enb_ue_s1ap_id, source_ue->mme_ue_s1ap_id); @@ -2949,12 +3131,13 @@ void s1ap_handle_handover_notification( memcpy(&mme_ue->e_cgi, &target_ue->saved.e_cgi, sizeof(ogs_e_cgi_t)); mme_ue->ue_location_timestamp = ogs_time_now(); - ogs_assert(OGS_OK == - s1ap_send_ue_context_release_command(source_ue, + r = s1ap_send_ue_context_release_command(source_ue, S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_successful_handover, S1AP_UE_CTX_REL_S1_HANDOVER_COMPLETE, - ogs_app()->time.handover.duration)); + ogs_app()->time.handover.duration); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); ogs_list_init(&mme_ue->bearer_to_modify_list); @@ -2979,7 +3162,7 @@ void s1ap_handle_s1_reset( mme_enb_t *enb, ogs_s1ap_message_t *message) { char buf[OGS_ADDRSTRLEN]; - int i; + int i, r; S1AP_InitiatingMessage_t *initiatingMessage = NULL; S1AP_Reset_t *Reset = NULL; @@ -3021,9 +3204,10 @@ void s1ap_handle_s1_reset( if (!Cause) { ogs_error("No Cause"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3032,9 +3216,10 @@ void s1ap_handle_s1_reset( if (!ResetType) { ogs_error("No ResetType"); - ogs_assert(OGS_OK == - s1ap_send_error_indication(enb, NULL, NULL, - S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error)); + r = s1ap_send_error_indication(enb, NULL, NULL, + S1AP_Cause_PR_protocol, S1AP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; } @@ -3058,9 +3243,11 @@ void s1ap_handle_s1_reset( * for new UE-associated logical S1-connections over the S1 interface, * the MME shall respond with the RESET ACKNOWLEDGE message. */ - if (ogs_list_count(&enb->enb_ue_list) == 0) - ogs_assert(OGS_OK == - s1ap_send_s1_reset_ack(enb, NULL)); + if (ogs_list_count(&enb->enb_ue_list) == 0) { + r = s1ap_send_s1_reset_ack(enb, NULL); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); + } break; @@ -3074,7 +3261,10 @@ void s1ap_handle_s1_reset( ogs_pkbuf_free(enb->s1_reset_ack); enb->s1_reset_ack = ogs_s1ap_build_s1_reset_ack(partOfS1_Interface); - ogs_expect_or_return(enb->s1_reset_ack); + if (!enb->s1_reset_ack) { + ogs_error("ogs_s1ap_build_s1_reset_ack() failed"); + return; + } for (i = 0; i < partOfS1_Interface->list.count; i++) { S1AP_UE_associatedLogicalS1_ConnectionItemRes_t *ie2 = NULL; @@ -3153,7 +3343,9 @@ void s1ap_handle_s1_reset( * where PartOfS1_interface was requested * REMOVED */ ogs_assert(enb->s1_reset_ack); - s1ap_send_to_enb(enb, enb->s1_reset_ack, S1AP_NON_UE_SIGNALLING); + r = s1ap_send_to_enb(enb, enb->s1_reset_ack, S1AP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); /* Clear S1-Reset Ack Buffer */ enb->s1_reset_ack = NULL; diff --git a/src/mme/s1ap-path.c b/src/mme/s1ap-path.c index 4e3a18d39..5ed5b54da 100644 --- a/src/mme/s1ap-path.c +++ b/src/mme/s1ap-path.c @@ -55,16 +55,16 @@ int s1ap_send_to_enb(mme_enb_t *enb, ogs_pkbuf_t *pkbuf, uint16_t stream_no) enb = mme_enb_cycle(enb); if (!enb) { - ogs_warn("eNB has already been removed"); + ogs_error("eNB has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } ogs_assert(enb->sctp.sock); if (enb->sctp.sock->fd == INVALID_SOCKET) { ogs_fatal("eNB SCTP socket has already been destroyed"); ogs_log_hexdump(OGS_LOG_FATAL, pkbuf->data, pkbuf->len); - ogs_assert_if_reached(); + ogs_pkbuf_free(pkbuf); return OGS_ERROR; } @@ -84,16 +84,20 @@ int s1ap_send_to_enb(mme_enb_t *enb, ogs_pkbuf_t *pkbuf, uint16_t stream_no) int s1ap_send_to_enb_ue(enb_ue_t *enb_ue, ogs_pkbuf_t *pkbuf) { + int rv; ogs_assert(pkbuf); enb_ue = enb_ue_cycle(enb_ue); if (!enb_ue) { - ogs_warn("S1 context has already been removed"); + ogs_error("S1 context has already been removed"); ogs_pkbuf_free(pkbuf); - return OGS_ERROR; + return OGS_NOTFOUND; } - return s1ap_send_to_enb(enb_ue->enb, pkbuf, enb_ue->enb_ostream_id); + rv = s1ap_send_to_enb(enb_ue->enb, pkbuf, enb_ue->enb_ostream_id); + ogs_expect(rv == OGS_OK); + + return rv; } int s1ap_delayed_send_to_enb_ue( @@ -118,10 +122,10 @@ int s1ap_delayed_send_to_enb_ue( return OGS_OK; } else { - mme_enb_t *enb = NULL; - enb = enb_ue->enb; - ogs_assert(enb); - return s1ap_send_to_enb_ue(enb_ue, pkbuf); + int rv = s1ap_send_to_enb_ue(enb_ue, pkbuf); + ogs_expect(rv == OGS_OK); + + return rv; } } @@ -154,6 +158,7 @@ int s1ap_send_to_esm( int s1ap_send_to_nas(enb_ue_t *enb_ue, S1AP_ProcedureCode_t procedureCode, S1AP_NAS_PDU_t *nasPdu) { + int rv; ogs_nas_eps_security_header_t *sh = NULL; ogs_nas_security_header_type_t security_header_type; @@ -244,9 +249,11 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue, ogs_pkbuf_free(nasbuf); return OGS_ERROR; } - return s1ap_send_to_esm( + rv = s1ap_send_to_esm( mme_ue, nasbuf, security_header_type.type, OGS_GTP_CREATE_IN_UPLINK_NAS_TRANSPORT); + ogs_expect(rv == OGS_OK); + return rv; } else { ogs_error("Unknown/Unimplemented NAS Protocol discriminator 0x%02x", h->protocol_discriminator); @@ -262,7 +269,10 @@ int s1ap_send_s1_setup_response(mme_enb_t *enb) ogs_debug("S1-Setup response"); s1ap_buffer = s1ap_build_setup_rsp(); - ogs_expect_or_return_val(s1ap_buffer, OGS_ERROR); + if (!s1ap_buffer) { + ogs_error("s1ap_build_setup_rsp() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(enb, s1ap_buffer, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -278,7 +288,10 @@ int s1ap_send_s1_setup_failure( ogs_debug("S1-Setup failure"); s1ap_buffer = s1ap_build_setup_failure(group, cause, S1AP_TimeToWait_v10s); - ogs_expect_or_return_val(s1ap_buffer, OGS_ERROR); + if (!s1ap_buffer) { + ogs_error("s1ap_build_setup_failure() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(enb, s1ap_buffer, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -295,7 +308,10 @@ int s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue) ogs_debug("InitialContextSetupRequest"); s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, NULL); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_initial_context_setup_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -312,7 +328,10 @@ int s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue) ogs_debug("UEContextModificationRequest"); s1apbuf = s1ap_build_ue_context_modification_request(mme_ue); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_ue_context_modification_request() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -340,7 +359,10 @@ int s1ap_send_ue_context_release_command( group, (int)cause, action, (int)duration); s1apbuf = s1ap_build_ue_context_release_command(enb_ue, group, cause); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_ue_context_release_command() failed"); + return OGS_ERROR; + } rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, duration); ogs_expect(rv == OGS_OK); @@ -369,14 +391,23 @@ int s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) s1apbuf = mme_ue->t3413.pkbuf; } else { s1apbuf = s1ap_build_paging(mme_ue, cn_domain); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_paging() failed"); + return OGS_ERROR; + } } mme_ue->t3413.pkbuf = ogs_pkbuf_copy(s1apbuf); - ogs_expect_or_return_val(mme_ue->t3413.pkbuf, OGS_ERROR); + if (!mme_ue->t3413.pkbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("s1ap_send_to_enb() failed"); + return rv; + } } } } @@ -400,7 +431,10 @@ int s1ap_send_mme_configuration_transfer( ogs_debug("MMEConfigurationTransfer"); s1apbuf = s1ap_build_mme_configuration_transfer(SONConfigurationTransfer); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_mme_configuration_transfer() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(target_enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -417,7 +451,10 @@ int s1ap_send_e_rab_modification_confirm(mme_ue_t *mme_ue) ogs_debug("E-RABModificationConfirm"); s1apbuf = s1ap_build_e_rab_modification_confirm(mme_ue); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_e_rab_modification_confirm() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -436,7 +473,10 @@ int s1ap_send_path_switch_ack( ogs_debug("PathSwitchAcknowledge"); s1apbuf = s1ap_build_path_switch_ack( mme_ue, e_rab_to_switched_in_uplink_list); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_path_switch_ack() failed"); + return OGS_ERROR; + } rv = nas_eps_send_to_enb(mme_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -453,7 +493,10 @@ int s1ap_send_handover_command(enb_ue_t *source_ue) ogs_debug("HandoverCommand"); s1apbuf = s1ap_build_handover_command(source_ue); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_handover_command() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -472,7 +515,10 @@ int s1ap_send_handover_preparation_failure( ogs_debug("HandoverPreparationFailure"); s1apbuf = s1ap_build_handover_preparation_failure(source_ue, group, cause); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_handover_preparation_failure() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -489,7 +535,10 @@ int s1ap_send_handover_cancel_ack(enb_ue_t *source_ue) ogs_debug("HandoverCancelAcknowledge"); s1apbuf = s1ap_build_handover_cancel_ack(source_ue); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_handover_cancel_ack() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb_ue(source_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -516,11 +565,12 @@ int s1ap_send_handover_request( target_ue = enb_ue_add(target_enb, INVALID_UE_S1AP_ID); if (target_ue == NULL) { - ogs_assert(OGS_OK == - s1ap_send_error_indication(target_enb, NULL, NULL, + rv = s1ap_send_error_indication(target_enb, NULL, NULL, S1AP_Cause_PR_misc, - S1AP_CauseMisc_control_processing_overload)); - return OGS_ERROR; + S1AP_CauseMisc_control_processing_overload); + ogs_expect(rv == OGS_OK); + + return rv; } ogs_info(" Source : ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", @@ -533,7 +583,10 @@ int s1ap_send_handover_request( s1apbuf = s1ap_build_handover_request( target_ue, handovertype, cause, source_totarget_transparentContainer); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_handover_request() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb_ue(target_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -554,7 +607,10 @@ int s1ap_send_mme_status_transfer( ogs_info("MMEStatusTransfer"); s1apbuf = s1ap_build_mme_status_transfer(target_ue, enb_statustransfer_transparentContainer); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("s1ap_build_mme_status_transfer() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb_ue(target_ue, s1apbuf); ogs_expect(rv == OGS_OK); @@ -576,7 +632,10 @@ int s1ap_send_error_indication( ogs_info("ErrorIndication"); s1apbuf = ogs_s1ap_build_error_indication( mme_ue_s1ap_id, enb_ue_s1ap_id, group, cause); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("ogs_s1ap_build_error_indication() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); @@ -596,9 +655,15 @@ int s1ap_send_error_indication2( ogs_assert(mme_ue); enb_ue = enb_ue_cycle(mme_ue->enb_ue); - ogs_expect_or_return_val(enb_ue, OGS_ERROR); - enb = enb_ue->enb; - ogs_expect_or_return_val(enb, OGS_ERROR); + if (!enb_ue) { + ogs_error("S1 context has already been removed"); + return OGS_NOTFOUND; + } + enb = mme_enb_cycle(enb_ue->enb); + if (!enb) { + ogs_error("eNB has already been removed"); + return OGS_NOTFOUND; + } mme_ue_s1ap_id = enb_ue->mme_ue_s1ap_id, enb_ue_s1ap_id = enb_ue->enb_ue_s1ap_id, @@ -621,7 +686,10 @@ int s1ap_send_s1_reset_ack( ogs_info("S1-Reset Acknowledge"); s1apbuf = ogs_s1ap_build_s1_reset_ack(partOfS1_Interface); - ogs_expect_or_return_val(s1apbuf, OGS_ERROR); + if (!s1apbuf) { + ogs_error("ogs_s1ap_build_s1_reset_ack() failed"); + return OGS_ERROR; + } rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_expect(rv == OGS_OK); diff --git a/src/mme/sbc-handler.c b/src/mme/sbc-handler.c index b408565c4..466aa7efb 100644 --- a/src/mme/sbc-handler.c +++ b/src/mme/sbc-handler.c @@ -26,7 +26,7 @@ void sbc_handle_write_replace_warning_request(sbc_pws_data_t *sbc_pws) { ogs_pkbuf_t *s1apbuf = NULL; mme_enb_t *enb = NULL; - int i, j, flag; + int i, j, flag, r; /* Find enB with matched TAI */ ogs_list_for_each(&mme_self()->enb_list, enb) { @@ -48,11 +48,15 @@ void sbc_handle_write_replace_warning_request(sbc_pws_data_t *sbc_pws) if (flag) { /* Build S1AP Write Replace Warning Request message */ s1apbuf = s1ap_build_write_replace_warning_request(sbc_pws); - ogs_expect_or_return(s1apbuf); + if (!s1apbuf) { + ogs_error("s1ap_build_kill_request() failed"); + return; + } /* Send to enb */ - ogs_expect(s1ap_send_to_enb( - enb, s1apbuf, S1AP_NON_UE_SIGNALLING) == OGS_OK); + r = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } } @@ -61,7 +65,7 @@ void sbc_handle_stop_warning_request(sbc_pws_data_t *sbc_pws) { ogs_pkbuf_t *s1apbuf = NULL; mme_enb_t *enb = NULL; - int i, j, flag; + int i, j, flag, r; /* Find enB with matched TAI */ ogs_list_for_each(&mme_self()->enb_list, enb) { @@ -83,11 +87,15 @@ void sbc_handle_stop_warning_request(sbc_pws_data_t *sbc_pws) if (flag) { /* Build S1AP Kill request message */ s1apbuf = s1ap_build_kill_request(sbc_pws); - ogs_expect_or_return(s1apbuf); + if (!s1apbuf) { + ogs_error("s1ap_build_kill_request() failed"); + return; + } /* Send to enb */ - ogs_expect(s1ap_send_to_enb( - enb, s1apbuf, S1AP_NON_UE_SIGNALLING) == OGS_OK); + r = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } } } diff --git a/src/mme/sgsap-handler.c b/src/mme/sgsap-handler.c index 7a2010ae4..07c5f0378 100644 --- a/src/mme/sgsap-handler.c +++ b/src/mme/sgsap-handler.c @@ -30,6 +30,7 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) { + int r; ogs_tlv_t *root = NULL, *iter = NULL; mme_ue_t *mme_ue = NULL; @@ -116,21 +117,24 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_debug(" P-TMSI[0x%08x]", mme_ue->p_tmsi); } - ogs_assert(OGS_OK == - nas_eps_send_attach_accept(mme_ue)); + r = nas_eps_send_attach_accept(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); return; error: - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, + r = nas_eps_send_attach_reject(mme_ue, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); mme_send_delete_session_or_mme_ue_context_release(mme_ue); } void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) { + int r; ogs_tlv_t *root = NULL, *iter = NULL; mme_ue_t *mme_ue = NULL; @@ -203,9 +207,10 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_plmn_id_hexdump(&lai->nas_plmn_id), lai->lac); } - ogs_assert(OGS_OK == - nas_eps_send_attach_reject(mme_ue, - emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); + r = nas_eps_send_attach_reject(mme_ue, + emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; @@ -277,6 +282,7 @@ void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) { + int r; ogs_tlv_t *root = NULL, *iter = NULL; mme_ue_t *mme_ue = NULL; @@ -354,22 +360,25 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) /* UE will respond Extended Service Request in PS CNDomain*/ MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_CS_CALL_SERVICE, NULL); - ogs_assert(OGS_OK == - s1ap_send_paging(mme_ue, S1AP_CNDomain_cs)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_cs); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (SMS_SERVICE_INDICATOR(mme_ue)) { /* UE will respond Service Request in PS CNDomain*/ MME_STORE_PAGING_INFO(mme_ue, MME_PAGING_TYPE_SMS_SERVICE, NULL); - ogs_assert(OGS_OK == - s1ap_send_paging(mme_ue, S1AP_CNDomain_ps)); + r = s1ap_send_paging(mme_ue, S1AP_CNDomain_ps); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else goto paging_reject; } else { if (CS_CALL_SERVICE_INDICATOR(mme_ue)) { - ogs_assert(OGS_OK == - nas_eps_send_cs_service_notification(mme_ue)); + r = nas_eps_send_cs_service_notification(mme_ue); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } else if (SMS_SERVICE_INDICATOR(mme_ue)) { ogs_assert(OGS_OK == sgsap_send_service_request( @@ -395,6 +404,7 @@ paging_reject: void sgsap_handle_downlink_unitdata(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) { + int r; ogs_tlv_t *root = NULL, *iter = NULL; mme_ue_t *mme_ue = NULL; @@ -455,9 +465,10 @@ void sgsap_handle_downlink_unitdata(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) nas_message_container_buffer, nas_message_container_length); - ogs_assert(OGS_OK == - nas_eps_send_downlink_nas_transport(mme_ue, - nas_message_container_buffer, nas_message_container_length)); + r = nas_eps_send_downlink_nas_transport(mme_ue, + nas_message_container_buffer, nas_message_container_length); + ogs_expect(r == OGS_OK); + ogs_assert(r != OGS_ERROR); } void sgsap_handle_reset_indication(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) diff --git a/src/mme/sgsap-path.c b/src/mme/sgsap-path.c index ed08aca16..25d56f740 100644 --- a/src/mme/sgsap-path.c +++ b/src/mme/sgsap-path.c @@ -120,7 +120,10 @@ int sgsap_send_location_update_request(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_location_update_request(mme_ue); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_location_update_request() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -137,7 +140,10 @@ int sgsap_send_tmsi_reallocation_complete(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_tmsi_reallocation_complete(mme_ue); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_tmsi_reallocation_complete() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -151,7 +157,10 @@ int sgsap_send_detach_indication(mme_ue_t *mme_ue) ogs_assert(mme_ue); pkbuf = sgsap_build_detach_indication(mme_ue); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_detach_indication() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -168,7 +177,10 @@ int sgsap_send_mo_csfb_indication(mme_ue_t *mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); pkbuf = sgsap_build_mo_csfb_indication(mme_ue); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_mo_csfb_indication() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -187,7 +199,10 @@ int sgsap_send_paging_reject(mme_ue_t *mme_ue, uint8_t sgs_cause) pkbuf = sgsap_build_paging_reject( &mme_ue->nas_mobile_identity_imsi, SGSAP_IE_IMSI_LEN, sgs_cause); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_paging_reject() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -206,7 +221,10 @@ int sgsap_send_service_request(mme_ue_t *mme_ue, uint8_t emm_mode) ogs_debug(" EMM_MODE[%d]", emm_mode); pkbuf = sgsap_build_service_request(mme_ue, emm_mode); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_service_request() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -222,7 +240,10 @@ int sgsap_send_reset_ack(mme_vlr_t *vlr) ogs_debug("[SGSAP] RESET-ACK"); pkbuf = sgsap_build_reset_ack(vlr); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_reset_ack() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr_with_sid(vlr, pkbuf, 0); ogs_expect(rv == OGS_OK); @@ -243,7 +264,10 @@ int sgsap_send_uplink_unitdata(mme_ue_t *mme_ue, nas_message_container->buffer, nas_message_container->length); pkbuf = sgsap_build_uplink_unidata(mme_ue, nas_message_container); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_uplink_unidata() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); @@ -261,7 +285,10 @@ int sgsap_send_ue_unreachable(mme_ue_t *mme_ue, uint8_t sgs_cause) ogs_debug(" CAUSE[%d]", sgs_cause); pkbuf = sgsap_build_ue_unreachable(mme_ue, sgs_cause); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgsap_build_ue_unreachable() failed"); + return OGS_ERROR; + } rv = sgsap_send_to_vlr(mme_ue, pkbuf); ogs_expect(rv == OGS_OK); diff --git a/src/nrf/sbi-path.c b/src/nrf/sbi-path.c index 1fe3e26ea..0e9dbcf28 100644 --- a/src/nrf/sbi-path.c +++ b/src/nrf/sbi-path.c @@ -84,11 +84,17 @@ bool nrf_nnrf_nfm_send_nf_status_notify( ogs_assert(subscription_data); client = subscription_data->client; - ogs_expect_or_return_val(client, false); + if (!client) { + ogs_error("No Client"); + return false; + } request = nrf_nnrf_nfm_build_nf_status_notify( subscription_data, event, nf_instance); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("nrf_nnrf_nfm_build_nf_status_notify() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); @@ -103,6 +109,7 @@ bool nrf_nnrf_nfm_send_nf_status_notify_all( OpenAPI_notification_event_type_e event, ogs_sbi_nf_instance_t *nf_instance) { + bool rc; ogs_sbi_subscription_data_t *subscription_data = NULL; ogs_assert(nf_instance); @@ -135,10 +142,12 @@ bool nrf_nnrf_nfm_send_nf_status_notify_all( continue; } - ogs_expect_or_return_val(true == - nrf_nnrf_nfm_send_nf_status_notify( - subscription_data, event, nf_instance), - false); + rc = nrf_nnrf_nfm_send_nf_status_notify( + subscription_data, event, nf_instance); + if (rc == false) { + ogs_error("nrf_nnrf_nfm_send_nf_status_notify() failed"); + return rc; + } } return true; diff --git a/src/pcf/sbi-path.c b/src/pcf/sbi-path.c index c1e3cddb8..d167e4542 100644 --- a/src/pcf/sbi-path.c +++ b/src/pcf/sbi-path.c @@ -139,7 +139,10 @@ static bool pcf_sbi_discover_and_send( xact = ogs_sbi_xact_add( sbi_object, service_type, discovery_option, build, context, data); - ogs_expect_or_return_val(xact, false); + if (!xact) { + ogs_error("ogs_sbi_xact_add() failed"); + return false; + } xact->assoc_stream = stream; @@ -182,7 +185,10 @@ bool pcf_sess_sbi_discover_only( ogs_assert(service_type); xact = ogs_sbi_xact_add(&sess->sbi, service_type, NULL, NULL, NULL, NULL); - ogs_expect_or_return_val(xact, false); + if (!xact) { + ogs_error("ogs_sbi_xact_add() failed"); + return false; + } xact->assoc_stream = stream; @@ -265,7 +271,10 @@ bool pcf_sbi_send_am_policy_control_notify(pcf_ue_t *pcf_ue) ogs_assert(client); request = pcf_namf_callback_build_am_policy_control(pcf_ue, NULL); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("pcf_namf_callback_build_am_policy_control() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); @@ -289,7 +298,10 @@ bool pcf_sbi_send_smpolicycontrol_update_notify( request = pcf_nsmf_callback_build_smpolicycontrol_update( sess, SmPolicyDecision); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("pcf_nsmf_callback_build_smpolicycontrol_update() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); @@ -314,7 +326,10 @@ bool pcf_sbi_send_smpolicycontrol_delete_notify( request = pcf_nsmf_callback_build_smpolicycontrol_update( sess, SmPolicyDecision); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("pcf_nsmf_callback_build_smpolicycontrol_update() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_delete_notify_cb, request, app_session); @@ -336,7 +351,10 @@ bool pcf_sbi_send_smpolicycontrol_terminate_notify(pcf_sess_t *sess) ogs_assert(client); request = pcf_nsmf_callback_build_smpolicycontrol_terminate(sess, NULL); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("pcf_nsmf_callback_build_smpolicycontrol_terminate() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); @@ -358,7 +376,11 @@ bool pcf_sbi_send_policyauthorization_terminate_notify(pcf_app_t *app) ogs_assert(client); request = pcf_naf_callback_build_policyauthorization_terminate(app, NULL); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("pcf_naf_callback_build_policyauthorization_terminate() " + "failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); diff --git a/src/smf/sbi-path.c b/src/smf/sbi-path.c index ea7aa2b42..0b048f318 100644 --- a/src/smf/sbi-path.c +++ b/src/smf/sbi-path.c @@ -392,7 +392,10 @@ bool smf_sbi_send_sm_context_status_notify(smf_sess_t *sess) ogs_assert(client); request = smf_namf_callback_build_sm_context_status(sess, NULL); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("smf_namf_callback_build_sm_context_status() failed"); + return false; + } rc = ogs_sbi_send_request_to_client( client, client_notify_cb, request, NULL); From 184461c41158b6675ea3245ddb90bb39babdd603 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 11:07:47 +0900 Subject: [PATCH 11/20] Update document for v2.5.8 --- .../2023-01-23-release-v2.4.14-v2.5.8.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docs/_posts/2023-01-23-release-v2.4.14-v2.5.8.md diff --git a/docs/_posts/2023-01-23-release-v2.4.14-v2.5.8.md b/docs/_posts/2023-01-23-release-v2.4.14-v2.5.8.md new file mode 100644 index 000000000..7a68cac3d --- /dev/null +++ b/docs/_posts/2023-01-23-release-v2.4.14-v2.5.8.md @@ -0,0 +1,32 @@ +--- +title: "v2.4.14 and v2.5.8 - Bug Fixes" +date: 2023-01-23 11:04:00 +0900 +categories: + - Release +tags: + - News + - Release +head_inline: "" +--- + +#### Security Issues +- [UPF] Fixed an infinite loop when ext_len is 0 -- [2319375](https://github.com/open5gs/open5gs/commit/2319375ea7084e6e9f5db6f16853f7f8c146aa86) + +#### Bug Fixes +- [PROTO] Increased SDU buffer from 8k to 16k ([#2008](https://github.com/open5gs/open5gs/issues/2008)) -- [Sabreu](https://github.com/Sabreu) +- [AMF] Fixed a memory leak ([#1925](https://github.com/open5gs/open5gs/issues/1925)) -- [irazairspan](https://github.com/irazairspan) +- [UPF] Fixed a bug when 2 PDRs with same TEID ([#2003](https://github.com/open5gs/open5gs/issues/2003)) -- [shizw2](https://github.com/shizw2) +- [PCRF] Fixed a crash when switching between video and audio. ([#1981](https://github.com/open5gs/open5gs/issues/1981)) -- [lglhust](https://github.com/lglhust) +- [MME] Sending UEContextReleaseCommand after Attach-Reject to clear UE Context ([#1848](https://github.com/open5gs/open5gs/issues/1848)) -- [jmasterfunk84](https://github.com/jmasterfunk84) +- [SBI] Case-Insensitive inside MIME message ([#1939](https://github.com/open5gs/open5gs/issues/1939)) -- [congzee](https://github.com/congzee) +- [AMF] Fixed a problem of SMF selection -- ([#1929](https://github.com/open5gs/open5gs/pull/1929)) -- [miguelbf-alb](https://github.com/miguelbf-alb) +- [AMF] Fixed a crash while NG_Reset in response for UE_Context_Release_Command ([#1928](https://github.com/open5gs/open5gs/issues/1928)) -- [mateuszmichalskiacc](https://github.com/mateuszmichalskiacc) +- [AMF] Wrongly sending NG-AP "PDU Session Release" to gNodeB when gNodeB does not have a PDU Session ([#1925](https://github.com/open5gs/open5gs/issues/1925)) -- [irazairspan](https://github.com/irazairspan) +- [AMF/MME] Forgetting the UE Radio Capabilities when UE is sending NAS "De-Registration Request" with "type = Switch-Off" ([#1917](https://github.com/open5gs/open5gs/issues/1917)) -- [irazairspan](https://github.com/irazairspan) +- [SMF/UPF] Fixed stack overflow on small memory like Alpine. ([#1911](https://github.com/open5gs/open5gs/issues/1911)) -- [maikovisky](https://github.com/maikovisky) +- [AMF/MME] Refactoring common_register_state() to prevent a crash ([#1912](https://github.com/open5gs/open5gs/issues/1912)) -- [lemon1009](https://github.com/lemon1009) +- [UPF] Packet buffer must be freed after sending replay message -- ([#1936](https://github.com/open5gs/open5gs/pull/1936)) -- [lester-001](https://github.com/lester-001) +- [AMF] Added safety code to prevent crash while getting amf_ue from sess -- ([#1913](https://github.com/open5gs/open5gs/pull/1913)) -- [lester-001](https://github.com/lester-001) + +Download -- [v2.5.7.tar.gz](https://github.com/open5gs/open5gs/archive/v2.5.7.tar.gz) +{: .notice--info} From f8aedb3abe323af67f18d772f8714162edbf70ea Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 11:08:44 +0900 Subject: [PATCH 12/20] remove old document --- .../2023-01-14-release-v2.4.13-v2.5.7.md | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 docs/_posts/2023-01-14-release-v2.4.13-v2.5.7.md diff --git a/docs/_posts/2023-01-14-release-v2.4.13-v2.5.7.md b/docs/_posts/2023-01-14-release-v2.4.13-v2.5.7.md deleted file mode 100644 index 5a2de3f80..000000000 --- a/docs/_posts/2023-01-14-release-v2.4.13-v2.5.7.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "v2.4.13 and v2.5.7 - Bug Fixes" -date: 2023-01-14 11:21:00 +0900 -categories: - - Release -tags: - - News - - Release -head_inline: "" ---- - -#### Security Issues -- [UPF] Fixed an infinite loop when ext_len is 0 -- [2319375](https://github.com/open5gs/open5gs/commit/2319375ea7084e6e9f5db6f16853f7f8c146aa86) - -#### Bug Fixes -- [PCRF] Fixed a crash when switching between video and audio. ([#1981](https://github.com/open5gs/open5gs/issues/1981)) -- [lglhust](https://github.com/lglhust) -- [MME] Sending UEContextReleaseCommand after Attach-Reject to clear UE Context ([#1848](https://github.com/open5gs/open5gs/issues/1848)) -- [jmasterfunk84](https://github.com/jmasterfunk84) -- [SBI] Case-Insensitive inside MIME message ([#1939](https://github.com/open5gs/open5gs/issues/1939)) -- [congzee](https://github.com/congzee) -- [AMF] Fixed a problem of SMF selection -- ([#1929](https://github.com/open5gs/open5gs/pull/1929)) -- [miguelbf-alb](https://github.com/miguelbf-alb) -- [AMF] Fixed a crash while NG_Reset in response for UE_Context_Release_Command ([#1928](https://github.com/open5gs/open5gs/issues/1928)) -- [mateuszmichalskiacc](https://github.com/mateuszmichalskiacc) -- [AMF] Wrongly sending NG-AP "PDU Session Release" to gNodeB when gNodeB does not have a PDU Session ([#1925](https://github.com/open5gs/open5gs/issues/1925)) -- [irazairspan](https://github.com/irazairspan) -- [AMF/MME] Forgetting the UE Radio Capabilities when UE is sending NAS "De-Registration Request" with "type = Switch-Off" ([#1917](https://github.com/open5gs/open5gs/issues/1917)) -- [irazairspan](https://github.com/irazairspan) -- [SMF/UPF] Fixed stack overflow on small memory like Alpine. ([#1911](https://github.com/open5gs/open5gs/issues/1911)) -- [maikovisky](https://github.com/maikovisky) -- [AMF/MME] Refactoring common_register_state() to prevent a crash ([#1912](https://github.com/open5gs/open5gs/issues/1912)) -- [lemon1009](https://github.com/lemon1009) -- [UPF] Packet buffer must be freed after sending replay message -- ([#1936](https://github.com/open5gs/open5gs/pull/1936)) -- [lester-001](https://github.com/lester-001) -- [AMF] Added safety code to prevent crash while getting amf_ue from sess -- ([#1913](https://github.com/open5gs/open5gs/pull/1913)) -- [lester-001](https://github.com/lester-001) - -Download -- [v2.4.13.tar.gz](https://github.com/open5gs/open5gs/archive/v2.4.13.tar.gz) and [v2.5.7.tar.gz](https://github.com/open5gs/open5gs/archive/v2.5.7.tar.gz) -{: .notice--info} From 54331d77ee3c1649742ed674088fccc8a162b7c7 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 15:58:55 +0900 Subject: [PATCH 13/20] [UPF] URR time threshold log to info (#1997) --- src/upf/context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/upf/context.c b/src/upf/context.c index c907faf11..4644c20e9 100644 --- a/src/upf/context.c +++ b/src/upf/context.c @@ -769,7 +769,7 @@ static void upf_sess_urr_acc_timers_cb(void *data) ogs_pfcp_sess_t *pfcp_sess = urr->sess; upf_sess_t *sess = UPF_SESS(pfcp_sess); - ogs_warn("upf_time_threshold_cb() triggered! urr=%p", urr); + ogs_info("upf_time_threshold_cb() triggered! urr=%p", urr); if (urr->rep_triggers.quota_validity_time || urr->rep_triggers.time_quota || From ed5cd4d513af0b30585832c203e667ccc3737fe3 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 23 Jan 2023 18:44:43 +0900 Subject: [PATCH 14/20] [MME] Fixed a crash when no UE context (#2016) --- src/mme/s1ap-handler.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index 6b524dced..b0cefd647 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -542,8 +542,7 @@ void s1ap_handle_uplink_nas_transport( memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t)); mme_ue->ue_location_timestamp = ogs_time_now(); } else { - ogs_fatal("No UE Context in UplinkNASTransport"); - ogs_assert_if_reached(); + ogs_error("No UE Context in UplinkNASTransport"); } r = s1ap_send_to_nas(enb_ue, From c6fd4ae6b84af8ed9101d98886f99844164f6b49 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 00:01:36 +0900 Subject: [PATCH 15/20] [LOG] remove ogs_expect_or_return()/return_val() --- lib/asn1c/util/message.c | 5 +- lib/core/ogs-conv.c | 10 +- lib/core/ogs-epoll.c | 5 +- lib/core/ogs-hash.c | 10 +- lib/core/ogs-log.h | 18 --- lib/core/ogs-memory.c | 28 +++- lib/core/ogs-pkbuf.c | 35 ++++- lib/core/ogs-poll.c | 5 +- lib/core/ogs-queue.c | 11 +- lib/core/ogs-sockaddr.c | 25 +++- lib/core/ogs-socket.c | 5 +- lib/core/ogs-socknode.c | 5 +- lib/core/ogs-strings.c | 15 +- lib/core/ogs-thread.c | 5 +- lib/core/ogs-timer.c | 6 +- lib/core/ogs-tlv-msg.c | 164 ++++++++++++++++----- lib/gtp/context.c | 15 +- lib/gtp/v1/conv.c | 10 +- lib/gtp/v1/path.c | 30 +++- lib/gtp/v2/build.c | 5 +- lib/gtp/v2/conv.c | 5 +- lib/gtp/v2/path.c | 30 +++- lib/nas/5gs/conv.c | 37 +++-- lib/nas/5gs/encoder.c | 10 +- lib/nas/5gs/support/nas-message.py | 10 +- lib/nas/5gs/types.c | 10 +- lib/nas/eps/encoder.c | 10 +- lib/nas/eps/support/nas-message.py | 10 +- lib/ngap/message.c | 5 +- lib/pfcp/build.c | 20 ++- lib/pfcp/context.c | 25 +++- lib/pfcp/conv.c | 41 ++++-- lib/pfcp/handler.c | 10 +- lib/pfcp/path.c | 90 +++++++++--- lib/proto/types.c | 40 ++++-- lib/s1ap/message.c | 5 +- lib/sbi/context.c | 1 - lib/sbi/conv.c | 120 ++++++++++++---- lib/sbi/message.c | 223 +++++++++++++++++++++++------ lib/sbi/path.c | 76 ++++++---- src/bsf/context.c | 25 +++- src/bsf/nbsf-handler.c | 2 +- src/hss/hss-s6a-path.c | 50 +++++-- src/mme/mme-fd-path.c | 75 ++++++++-- src/mme/mme-gtp-path.c | 111 +++++++++++--- src/mme/mme-s11-build.c | 20 ++- src/mme/mme-s11-handler.c | 68 ++++++--- src/mme/sgsap-handler.c | 114 +++++++++++---- src/mme/sgsap-sm.c | 5 +- src/nrf/nnrf-handler.c | 23 ++- src/pcf/context.c | 30 +++- src/pcrf/pcrf-gx-path.c | 32 ++++- src/pcrf/pcrf-rx-path.c | 16 ++- src/sgwc/gtp-path.c | 20 ++- src/sgwc/pfcp-path.c | 90 +++++++++--- src/sgwc/s11-handler.c | 30 +++- src/sgwc/s5c-handler.c | 40 ++++-- src/sgwc/sxa-build.c | 10 +- src/sgwc/sxa-handler.c | 120 ++++++++++++---- src/sgwu/pfcp-path.c | 45 ++++-- src/sgwu/sxa-build.c | 10 +- src/smf/binding.c | 40 ++++-- src/smf/context.c | 5 +- src/smf/gn-build.c | 98 ++++++++++--- src/smf/gsm-build.c | 41 ++++-- src/smf/gtp-path.c | 85 ++++++++--- src/smf/gx-path.c | 16 ++- src/smf/gy-path.c | 16 ++- src/smf/n4-build.c | 10 +- src/smf/n4-handler.c | 10 +- src/smf/pfcp-path.c | 134 +++++++++++++---- src/smf/s5c-build.c | 15 +- src/smf/s5c-handler.c | 15 +- src/smf/s6b-path.c | 16 ++- src/upf/pfcp-path.c | 46 ++++-- tests/af/context.c | 10 +- tests/af/npcf-build.c | 40 +++--- tests/non3gpp/diameter-s6b-path.c | 16 ++- tests/non3gpp/diameter-swx-path.c | 50 +++++-- tests/non3gpp/gtp-path.c | 40 ++++-- tests/non3gpp/s2b-build.c | 10 +- tests/volte/diameter-cx-path.c | 100 ++++++++++--- tests/volte/diameter-rx-path.c | 4 +- 83 files changed, 2294 insertions(+), 649 deletions(-) diff --git a/lib/asn1c/util/message.c b/lib/asn1c/util/message.c index d7f23b615..2d0425d86 100644 --- a/lib/asn1c/util/message.c +++ b/lib/asn1c/util/message.c @@ -28,7 +28,10 @@ ogs_pkbuf_t *ogs_asn_encode(const asn_TYPE_descriptor_t *td, void *sptr) ogs_assert(sptr); pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN); enc_ret = aper_encode_to_buffer(td, NULL, diff --git a/lib/core/ogs-conv.c b/lib/core/ogs-conv.c index e7db948b5..ba07007e8 100644 --- a/lib/core/ogs-conv.c +++ b/lib/core/ogs-conv.c @@ -191,10 +191,16 @@ char *ogs_uint64_to_string(uint64_t x) char *str, *p, *dup; str = ogs_uint64_to_0string(x); - ogs_expect_or_return_val(str, NULL); + if (!str) { + ogs_error("ogs_uint64_to_0string[%lld] failed", (long long)x); + return NULL; + } p = ogs_left_trimcharacter(str, '0'); - ogs_expect_or_return_val(p, NULL); + if (!p) { + ogs_error("ogs_left_trimcharacter[%s] failld", str); + return NULL; + } dup = ogs_strdup(p); ogs_free(str); diff --git a/lib/core/ogs-epoll.c b/lib/core/ogs-epoll.c index f74874b9d..5e7b087d8 100644 --- a/lib/core/ogs-epoll.c +++ b/lib/core/ogs-epoll.c @@ -112,7 +112,10 @@ static int epoll_add(ogs_poll_t *poll) map = ogs_hash_get(context->map_hash, &poll->fd, sizeof(poll->fd)); if (!map) { map = ogs_calloc(1, sizeof(*map)); - ogs_expect_or_return_val(map, OGS_ERROR); + if (!map) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } op = EPOLL_CTL_ADD; ogs_hash_set(context->map_hash, &poll->fd, sizeof(poll->fd), map); diff --git a/lib/core/ogs-hash.c b/lib/core/ogs-hash.c index 438bd5fcb..73d4cfaaa 100644 --- a/lib/core/ogs-hash.c +++ b/lib/core/ogs-hash.c @@ -72,7 +72,10 @@ ogs_hash_t *ogs_hash_make() ogs_time_t now = ogs_get_monotonic_time(); ht = ogs_malloc(sizeof(ogs_hash_t)); - ogs_expect_or_return_val(ht, NULL); + if (!ht) { + ogs_error("ogs_malloc() failed"); + return NULL; + } ht->free = NULL; ht->count = 0; @@ -88,7 +91,10 @@ ogs_hash_t *ogs_hash_make() ogs_hash_t *ogs_hash_make_custom(ogs_hashfunc_t hash_func) { ogs_hash_t *ht = ogs_hash_make(); - ogs_expect_or_return_val(ht, NULL); + if (!ht) { + ogs_error("ogs_hash_make() failed"); + return NULL; + } ht->hash_func = hash_func; return ht; } diff --git a/lib/core/ogs-log.h b/lib/core/ogs-log.h index 33c91d4e4..24a6b77d1 100644 --- a/lib/core/ogs-log.h +++ b/lib/core/ogs-log.h @@ -125,24 +125,6 @@ void ogs_log_hexdump_func(ogs_log_level_e level, int domain_id, } \ } while (0) -#define ogs_expect_or_return(expr) \ - do { \ - if (ogs_likely(expr)) ; \ - else { \ - ogs_error("%s: Expectation `%s' failed.", OGS_FUNC, #expr); \ - return; \ - } \ - } while (0) - -#define ogs_expect_or_return_val(expr, val) \ - do { \ - if (ogs_likely(expr)) ; \ - else { \ - ogs_error("%s: Expectation `%s' failed.", OGS_FUNC, #expr); \ - return (val); \ - } \ - } while (0) - #ifdef __cplusplus } #endif diff --git a/lib/core/ogs-memory.c b/lib/core/ogs-memory.c index 3e206b258..8c550a2da 100644 --- a/lib/core/ogs-memory.c +++ b/lib/core/ogs-memory.c @@ -124,7 +124,11 @@ void *ogs_malloc_debug(size_t size, const char *file_line) headroom = sizeof(ogs_pkbuf_t *); pkbuf = ogs_pkbuf_alloc_debug(NULL, headroom + size, file_line); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc_debug[headroom:%d, size:%d] failed", + (int)headroom, (int)size); + return NULL; + } ogs_pkbuf_reserve(pkbuf, headroom); memcpy(pkbuf->head, &pkbuf, headroom); @@ -155,7 +159,11 @@ void *ogs_calloc_debug(size_t nmemb, size_t size, const char *file_line) void *ptr = NULL; ptr = ogs_malloc_debug(nmemb * size, file_line); - ogs_expect_or_return_val(ptr, NULL); + if (!ptr) { + ogs_error("ogs_malloc_debug[nmemb:%d, size:%d] failed", + (int)nmemb, (int)size); + return NULL; + } memset(ptr, 0, nmemb * size); return ptr; @@ -174,10 +182,17 @@ void *ogs_realloc_debug(void *ptr, size_t size, const char *file_line) memcpy(&pkbuf, (unsigned char*)ptr - headroom, headroom); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("Cannot get pkbuf from ptr[%p], headroom[%d]", + ptr, (int)headroom); + return NULL; + } cluster = pkbuf->cluster; - ogs_expect_or_return_val(cluster, NULL); + if (!cluster) { + ogs_error("No cluster"); + return NULL; + } if (!size) { ogs_pkbuf_free(pkbuf); @@ -188,7 +203,10 @@ void *ogs_realloc_debug(void *ptr, size_t size, const char *file_line) void *new = NULL; new = ogs_malloc_debug(size, file_line); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_malloc_debug[%d] failed", (int)size); + return NULL; + } memcpy(new, ptr, pkbuf->len); diff --git a/lib/core/ogs-pkbuf.c b/lib/core/ogs-pkbuf.c index 85eb90ae6..a283ff24b 100644 --- a/lib/core/ogs-pkbuf.c +++ b/lib/core/ogs-pkbuf.c @@ -374,31 +374,52 @@ static ogs_cluster_t *cluster_alloc( if (size <= OGS_CLUSTER_128_SIZE) { ogs_pool_alloc(&pool->cluster_128, (ogs_cluster_128_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_128_SIZE; } else if (size <= OGS_CLUSTER_256_SIZE) { ogs_pool_alloc(&pool->cluster_256, (ogs_cluster_256_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_256_SIZE; } else if (size <= OGS_CLUSTER_512_SIZE) { ogs_pool_alloc(&pool->cluster_512, (ogs_cluster_512_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_512_SIZE; } else if (size <= OGS_CLUSTER_1024_SIZE) { ogs_pool_alloc(&pool->cluster_1024, (ogs_cluster_1024_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_1024_SIZE; } else if (size <= OGS_CLUSTER_2048_SIZE) { ogs_pool_alloc(&pool->cluster_2048, (ogs_cluster_2048_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_2048_SIZE; } else if (size <= OGS_CLUSTER_16384_SIZE) { ogs_pool_alloc(&pool->cluster_16384, (ogs_cluster_16384_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_16384_SIZE; } else if (size <= OGS_CLUSTER_BIG_SIZE) { ogs_pool_alloc(&pool->cluster_big, (ogs_cluster_big_t**)&buffer); - ogs_expect_or_return_val(buffer, NULL); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } cluster->size = OGS_CLUSTER_BIG_SIZE; } else { ogs_fatal("invalid size = %d", size); diff --git a/lib/core/ogs-poll.c b/lib/core/ogs-poll.c index 7e600a055..fac7be72d 100644 --- a/lib/core/ogs-poll.c +++ b/lib/core/ogs-poll.c @@ -35,7 +35,10 @@ bool ogs_pollset_actions_initialized = false; ogs_pollset_t *ogs_pollset_create(unsigned int capacity) { ogs_pollset_t *pollset = ogs_calloc(1, sizeof *pollset); - ogs_expect_or_return_val(pollset, NULL); + if (!pollset) { + ogs_error("ogs_calloc() failed"); + return NULL; + } pollset->capacity = capacity; diff --git a/lib/core/ogs-queue.c b/lib/core/ogs-queue.c index eec4fe4ff..7da89ced8 100644 --- a/lib/core/ogs-queue.c +++ b/lib/core/ogs-queue.c @@ -70,7 +70,10 @@ typedef struct ogs_queue_s { ogs_queue_t *ogs_queue_create(unsigned int capacity) { ogs_queue_t *queue = ogs_calloc(1, sizeof *queue); - ogs_expect_or_return_val(queue, NULL); + if (!queue) { + ogs_error("ogs_calloc() failed"); + return NULL; + } ogs_assert(queue); ogs_thread_mutex_init(&queue->one_big_mutex); @@ -78,7 +81,11 @@ ogs_queue_t *ogs_queue_create(unsigned int capacity) ogs_thread_cond_init(&queue->not_full); queue->data = ogs_calloc(1, capacity * sizeof(void*)); - ogs_expect_or_return_val(queue->data, NULL); + if (!queue->data) { + ogs_error("ogs_calloc[capacity:%d, sizeof(void*):%d] failed", + (int)capacity, (int)sizeof(void*)); + return NULL; + } queue->bounds = capacity; queue->nelts = 0; queue->in = 0; diff --git a/lib/core/ogs-sockaddr.c b/lib/core/ogs-sockaddr.c index a9f4064fa..52bf17005 100644 --- a/lib/core/ogs-sockaddr.c +++ b/lib/core/ogs-sockaddr.c @@ -130,7 +130,10 @@ int ogs_addaddrinfo(ogs_sockaddr_t **sa_list, continue; new = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(new, OGS_ERROR); + if (!new) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } memcpy(&new->sa, ai->ai_addr, ai->ai_addrlen); new->ogs_sin_port = htobe16(port); @@ -204,15 +207,24 @@ int ogs_copyaddrinfo(ogs_sockaddr_t **dst, const ogs_sockaddr_t *src) for (*dst = d = NULL, s = src; s; s = s->next) { if (!d) { *dst = d = ogs_memdup(s, sizeof *s); - ogs_expect_or_return_val(*dst, OGS_ERROR); + if (!(*dst)) { + ogs_error("ogs_memdup() failed"); + return OGS_ERROR; + } } else { d = d->next = ogs_memdup(s, sizeof *s); - ogs_expect_or_return_val(d, OGS_ERROR); + if (!d) { + ogs_error("ogs_memdup() failed"); + return OGS_ERROR; + } } if (s->hostname) { if (s == src || s->hostname != src->hostname) { d->hostname = ogs_strdup(s->hostname); - ogs_expect_or_return_val(d->hostname, OGS_ERROR); + if (!d->hostname) { + ogs_error("ogs_memdup() failed"); + return OGS_ERROR; + } } else { d->hostname = (*dst)->hostname; } @@ -287,7 +299,10 @@ ogs_sockaddr_t *ogs_link_local_addr(const char *dev, const ogs_sockaddr_t *sa) continue; addr = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr, NULL); + if (!addr) { + ogs_error("ogs_calloc() failed"); + return NULL; + } ogs_assert(addr); memcpy(&addr->sa, cur->ifa_addr, ogs_sockaddr_len(cur->ifa_addr)); diff --git a/lib/core/ogs-socket.c b/lib/core/ogs-socket.c index 43ced1c81..c0d5c1af8 100644 --- a/lib/core/ogs-socket.c +++ b/lib/core/ogs-socket.c @@ -55,7 +55,10 @@ ogs_sock_t *ogs_sock_create(void) ogs_sock_t *sock = NULL; sock = ogs_calloc(1, sizeof(*sock)); - ogs_expect_or_return_val(sock, NULL); + if (!sock) { + ogs_error("ogs_calloc() failed"); + return NULL; + } sock->fd = INVALID_SOCKET; diff --git a/lib/core/ogs-socknode.c b/lib/core/ogs-socknode.c index 96b05fd7b..afc440bf7 100644 --- a/lib/core/ogs-socknode.c +++ b/lib/core/ogs-socknode.c @@ -39,7 +39,10 @@ ogs_socknode_t *ogs_socknode_new(ogs_sockaddr_t *addr) ogs_assert(addr); node = ogs_calloc(1, sizeof(ogs_socknode_t)); - ogs_expect_or_return_val(node, NULL); + if (!node) { + ogs_error("ogs_calloc() failed"); + return NULL; + } node->addr = addr; diff --git a/lib/core/ogs-strings.c b/lib/core/ogs-strings.c index f22a34b18..c305b6b3c 100644 --- a/lib/core/ogs-strings.c +++ b/lib/core/ogs-strings.c @@ -237,7 +237,10 @@ char *ogs_strdup_debug(const char *s, const char *file_line) len = strlen(s) + 1; res = ogs_memdup_debug(s, len, file_line); - ogs_expect_or_return_val(res, res); + if (!res) { + ogs_error("ogs_memdup_debug[len:%d] failed", (int)len); + return res; + } return res; } @@ -254,7 +257,10 @@ char *ogs_strndup_debug( if (end != NULL) n = end - s; res = ogs_malloc_debug(n + 1, file_line); - ogs_expect_or_return_val(res, res); + if (!res) { + ogs_error("ogs_malloc_debug[n:%d] failed", (int)n); + return res; + } memcpy(res, s, n); res[n] = '\0'; return res; @@ -269,7 +275,10 @@ void *ogs_memdup_debug( return NULL; res = ogs_malloc_debug(n, file_line); - ogs_expect_or_return_val(res, res); + if (!res) { + ogs_error("ogs_malloc_debug[n:%d] failed", (int)n); + return res; + } memcpy(res, m, n); return res; } diff --git a/lib/core/ogs-thread.c b/lib/core/ogs-thread.c index e9c4ab9e2..050b6e5ad 100644 --- a/lib/core/ogs-thread.c +++ b/lib/core/ogs-thread.c @@ -77,7 +77,10 @@ static void *thread_worker(void *arg) ogs_thread_t *ogs_thread_create(void (*func)(void *), void *data) { ogs_thread_t *thread = ogs_calloc(1, sizeof *thread); - ogs_expect_or_return_val(thread, NULL); + if (!thread) { + ogs_error("ogs_calloc() failed"); + return NULL; + } ogs_thread_mutex_init(&thread->mutex); ogs_thread_cond_init(&thread->cond); diff --git a/lib/core/ogs-timer.c b/lib/core/ogs-timer.c index 56e63b06f..7f7042aeb 100644 --- a/lib/core/ogs-timer.c +++ b/lib/core/ogs-timer.c @@ -55,7 +55,10 @@ static void add_timer_node( ogs_timer_mgr_t *ogs_timer_mgr_create(unsigned int capacity) { ogs_timer_mgr_t *manager = ogs_calloc(1, sizeof *manager); - ogs_expect_or_return_val(manager, NULL); + if (!manager) { + ogs_error("ogs_calloc() failed"); + return NULL; + } ogs_pool_init(&manager->pool, capacity); @@ -87,7 +90,6 @@ ogs_timer_t *ogs_timer_add( ogs_fatal("ogs_pool_alloc() failed"); return NULL; } - ogs_expect_or_return_val(timer, NULL); memset(timer, 0, sizeof *timer); timer->cb = cb; diff --git a/lib/core/ogs-tlv-msg.c b/lib/core/ogs-tlv-msg.c index dea5714c7..034099d28 100644 --- a/lib/core/ogs-tlv-msg.c +++ b/lib/core/ogs-tlv-msg.c @@ -107,12 +107,21 @@ static ogs_tlv_t *tlv_add_leaf( case OGS_TV_INT8: { ogs_tlv_uint8_t *v = (ogs_tlv_uint8_t *)msg; - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, 1, desc->instance, &v->u8); - else - tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, 1, desc->instance, &v->u8); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { + tlv = ogs_tlv_add(tlv, tlv_mode, + desc->type, 1, desc->instance, &v->u8); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_UINT16: @@ -124,12 +133,21 @@ static ogs_tlv_t *tlv_add_leaf( v->u16 = htobe16(v->u16); - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, 2, desc->instance, &v->u16); - else - tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, 2, desc->instance, &v->u16); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { + tlv = ogs_tlv_add(tlv, tlv_mode, + desc->type, 2, desc->instance, &v->u16); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_UINT24: @@ -142,12 +160,21 @@ static ogs_tlv_t *tlv_add_leaf( v->u24 = v->u24 << 8; v->u24 = htobe32(v->u24); - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, 3, desc->instance, &v->u24); - else - tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, 3, desc->instance, &v->u24); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { + tlv = ogs_tlv_add(tlv, tlv_mode, + desc->type, 3, desc->instance, &v->u24); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_UINT32: @@ -159,13 +186,21 @@ static ogs_tlv_t *tlv_add_leaf( v->u32 = htobe32(v->u32); - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, 4, desc->instance, &v->u32); - else + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, 4, desc->instance, &v->u32); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_FIXED_STR: @@ -173,13 +208,21 @@ static ogs_tlv_t *tlv_add_leaf( { ogs_tlv_octet_t *v = (ogs_tlv_octet_t *)msg; - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, desc->length, desc->instance, v->data); - else + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, desc->length, desc->instance, v->data); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_VAR_STR: @@ -189,33 +232,49 @@ static ogs_tlv_t *tlv_add_leaf( if (v->len == 0) { ogs_error("No TLV length - [%s] T:%d I:%d (vsz=%d)", desc->name, desc->type, desc->instance, desc->vsize); - ogs_expect_or_return_val(0, NULL); + return NULL; } - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, v->len, desc->instance, v->data); - else + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, v->len, desc->instance, v->data); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } case OGS_TLV_NULL: case OGS_TV_NULL: { - if (parent_tlv) + if (parent_tlv) { tlv = ogs_tlv_embed(parent_tlv, tlv_mode, desc->type, 0, desc->instance, NULL); - else + if (!tlv) { + ogs_error("ogs_tlv_embed()"); + return NULL; + } + } else { tlv = ogs_tlv_add(tlv, tlv_mode, desc->type, 0, desc->instance, NULL); - ogs_expect_or_return_val(tlv, NULL); + if (!tlv) { + ogs_error("ogs_tlv_add()"); + return NULL; + } + } break; } default: - ogs_expect_or_return_val(0, NULL); - break; + ogs_error("Unknown type [%d]", desc->ctype); + return NULL; } return tlv; @@ -258,16 +317,21 @@ static uint32_t tlv_add_compound(ogs_tlv_t **root, ogs_tlv_t *parent_tlv, desc->vsize, p + offset2); if (parent_tlv) - tlv = ogs_tlv_embed(parent_tlv, tlv_ctype2mode(desc->ctype, mode), + tlv = ogs_tlv_embed(parent_tlv, + tlv_ctype2mode(desc->ctype, mode), desc->type, 0, desc->instance, NULL); else - tlv = ogs_tlv_add(tlv, tlv_ctype2mode(desc->ctype, mode), + tlv = ogs_tlv_add(tlv, + tlv_ctype2mode(desc->ctype, mode), desc->type, 0, desc->instance, NULL); r = tlv_add_compound(&emb_tlv, tlv, desc, p + offset2 + sizeof(ogs_tlv_presence_t), depth + 1, mode); - ogs_expect_or_return_val(r > 0 && emb_tlv, 0); + if (r <= 0 || !emb_tlv) { + ogs_error("tlv_add_compound() failed"); + return 0; + } count += 1 + r; } else { ogs_trace("BUILD %sL#%d [%s] T:%d L:%d I:%d " @@ -276,8 +340,12 @@ static uint32_t tlv_add_compound(ogs_tlv_t **root, ogs_tlv_t *parent_tlv, desc->instance, desc->ctype, desc->vsize, p + offset2); - tlv = tlv_add_leaf(parent_tlv, tlv, desc, p + offset2, mode); - ogs_expect_or_return_val(tlv, 0); + tlv = tlv_add_leaf(parent_tlv, tlv, desc, + p + offset2, mode); + if (!tlv) { + ogs_error("tlv_add_leaf() failed"); + return 0; + } count++; } @@ -298,16 +366,21 @@ static uint32_t tlv_add_compound(ogs_tlv_t **root, ogs_tlv_t *parent_tlv, desc->vsize, p + offset); if (parent_tlv) - tlv = ogs_tlv_embed(parent_tlv, tlv_ctype2mode(desc->ctype, mode), + tlv = ogs_tlv_embed(parent_tlv, + tlv_ctype2mode(desc->ctype, mode), desc->type, 0, desc->instance, NULL); else - tlv = ogs_tlv_add(tlv, tlv_ctype2mode(desc->ctype, mode), + tlv = ogs_tlv_add(tlv, + tlv_ctype2mode(desc->ctype, mode), desc->type, 0, desc->instance, NULL); r = tlv_add_compound(&emb_tlv, tlv, desc, p + offset + sizeof(ogs_tlv_presence_t), depth + 1, mode); - ogs_expect_or_return_val(r > 0 && emb_tlv, 0); + if (r <= 0 || !emb_tlv) { + ogs_error("tlv_add_compound() failed"); + return 0; + } count += 1 + r; } else { ogs_trace("BUILD %sL#%d [%s] T:%d L:%d I:%d " @@ -317,7 +390,10 @@ static uint32_t tlv_add_compound(ogs_tlv_t **root, ogs_tlv_t *parent_tlv, p + offset); tlv = tlv_add_leaf(parent_tlv, tlv, desc, p + offset, mode); - ogs_expect_or_return_val(tlv, 0); + if (!tlv) { + ogs_error("tlv_add_leaf() failed"); + return 0; + } count++; } @@ -344,20 +420,30 @@ ogs_pkbuf_t *ogs_tlv_build_msg(ogs_tlv_desc_t *desc, void *msg, int mode) if (desc->child_descs[0]) { r = tlv_add_compound(&root, NULL, desc, msg, 0, mode); - ogs_expect_or_return_val(r > 0 && root, NULL); + if (r <= 0 || !root) { + ogs_error("tlv_add_compound() failed"); + return NULL; + } length = ogs_tlv_calc_length(root); } else { length = 0; } pkbuf = ogs_pkbuf_alloc(NULL, OGS_TLV_MAX_HEADROOM+length); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_TLV_MAX_HEADROOM); ogs_pkbuf_put(pkbuf, length); if (desc->child_descs[0]) { rendlen = ogs_tlv_render(root, pkbuf->data, length); - ogs_expect_or_return_val(rendlen == length, NULL); + if (rendlen != length) { + ogs_error("ogs_tlv_render[rendlen:%d != length:%d] failed", + rendlen, length); + return NULL; + } ogs_tlv_free_all(root); } diff --git a/lib/gtp/context.c b/lib/gtp/context.c index 506d5e9b0..810370157 100644 --- a/lib/gtp/context.c +++ b/lib/gtp/context.c @@ -530,7 +530,10 @@ ogs_gtp_node_t *ogs_gtp_node_new(ogs_sockaddr_t *sa_list) ogs_assert(sa_list); ogs_pool_alloc(&pool, &node); - ogs_expect_or_return_val(node, NULL); + if (!node) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } memset(node, 0, sizeof(ogs_gtp_node_t)); node->sa_list = sa_list; @@ -563,7 +566,10 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid( ogs_assert(port); rv = ogs_gtp2_f_teid_to_sockaddr(f_teid, port, &addr); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_f_teid_to_sockaddr() failed"); + return NULL; + } rv = ogs_filter_ip_version( &addr, @@ -688,7 +694,10 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_ip( ogs_assert(port); rv = ogs_ip_to_sockaddr(ip, port, &addr); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_ip_to_sockaddr() failed"); + return NULL; + } rv = ogs_filter_ip_version( &addr, diff --git a/lib/gtp/v1/conv.c b/lib/gtp/v1/conv.c index a027f95ca..9951f702f 100644 --- a/lib/gtp/v1/conv.c +++ b/lib/gtp/v1/conv.c @@ -30,7 +30,10 @@ int ogs_gtp1_gsn_addr_to_sockaddr(const ogs_gtp1_gsn_addr_t *gsnaddr, switch (gsnaddr_len) { case OGS_GTP_GSN_ADDRESS_IPV4_LEN: addr = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr, OGS_ERROR); + if (!addr) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } addr->ogs_sa_family = AF_INET; addr->ogs_sin_port = port; addr->sin.sin_addr.s_addr = gsnaddr->addr; @@ -38,7 +41,10 @@ int ogs_gtp1_gsn_addr_to_sockaddr(const ogs_gtp1_gsn_addr_t *gsnaddr, break; case OGS_GTP_GSN_ADDRESS_IPV6_LEN: addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr6, OGS_ERROR); + if (!addr6) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } addr6->ogs_sa_family = AF_INET6; addr6->ogs_sin_port = port; memcpy(addr6->sin6.sin6_addr.s6_addr, gsnaddr->addr6, OGS_IPV6_LEN); diff --git a/lib/gtp/v1/path.c b/lib/gtp/v1/path.c index 7c1149675..55433d30a 100644 --- a/lib/gtp/v1/path.c +++ b/lib/gtp/v1/path.c @@ -43,7 +43,10 @@ ogs_pkbuf_t *ogs_gtp1_handle_echo_req(ogs_pkbuf_t *pkb) pkb_resp = ogs_pkbuf_alloc(NULL, 100 /* enough for ECHO_RSP; use smaller buffer */); - ogs_expect_or_return_val(pkb_resp, NULL); + if (!pkb_resp) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_put(pkb_resp, 100); gtph_resp = (ogs_gtp1_header_t *)pkb_resp->data; @@ -125,10 +128,16 @@ void ogs_gtp1_send_error_message( tlv->u8 = cause_value; pkbuf = ogs_gtp1_build_msg(&errmsg); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp1_build_msg() failed"); + return; + } rv = ogs_gtp1_xact_update_tx(xact, &errmsg.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -151,7 +160,10 @@ void ogs_gtp1_send_echo_request( h.teid = 0; pkbuf = ogs_gtp1_build_echo_request(h.type); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp1_build_echo_request() failed"); + return; + } xact = ogs_gtp1_xact_local_create(gnode, &h, pkbuf, NULL, NULL); @@ -174,10 +186,16 @@ void ogs_gtp1_send_echo_response(ogs_gtp_xact_t *xact, uint8_t recovery) h.teid = 0; pkbuf = ogs_gtp1_build_echo_response(h.type, recovery); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp1_build_echo_response() failed"); + return; + } rv = ogs_gtp1_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/lib/gtp/v2/build.c b/lib/gtp/v2/build.c index 291b7975f..1c44fa6bc 100644 --- a/lib/gtp/v2/build.c +++ b/lib/gtp/v2/build.c @@ -68,7 +68,10 @@ ogs_pkbuf_t *ogs_gtp2_build_error_indication( pkbuf = ogs_pkbuf_alloc( NULL, 100 /* enough for Error Indiciation; use smaller buffer */); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_GTPV1U_5GC_HEADER_LEN); /* diff --git a/lib/gtp/v2/conv.c b/lib/gtp/v2/conv.c index 505fc1289..bfb01a2dc 100644 --- a/lib/gtp/v2/conv.c +++ b/lib/gtp/v2/conv.c @@ -28,7 +28,10 @@ int ogs_gtp2_f_teid_to_sockaddr( ogs_assert(list); addr = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr, OGS_ERROR); + if (!addr) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } addr->ogs_sa_family = AF_INET; addr->ogs_sin_port = htobe16(port); diff --git a/lib/gtp/v2/path.c b/lib/gtp/v2/path.c index 3f7cd470f..1aa380428 100644 --- a/lib/gtp/v2/path.c +++ b/lib/gtp/v2/path.c @@ -149,7 +149,10 @@ ogs_pkbuf_t *ogs_gtp2_handle_echo_req(ogs_pkbuf_t *pkb) pkb_resp = ogs_pkbuf_alloc(NULL, 100 /* enough for ECHO_RSP; use smaller buffer */); - ogs_expect_or_return_val(pkb_resp, NULL); + if (!pkb_resp) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_put(pkb_resp, 100); gtph_resp = (ogs_gtp2_header_t *)pkb_resp->data; @@ -266,10 +269,16 @@ void ogs_gtp2_send_error_message( tlv->data = &cause; pkbuf = ogs_gtp2_build_msg(&errmsg); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(xact, &errmsg.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -292,7 +301,10 @@ void ogs_gtp2_send_echo_request( h.teid = 0; pkbuf = ogs_gtp2_build_echo_request(h.type, recovery, features); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_echo_request() failed"); + return; + } xact = ogs_gtp_xact_local_create(gnode, &h, pkbuf, NULL, NULL); @@ -316,10 +328,16 @@ void ogs_gtp2_send_echo_response(ogs_gtp_xact_t *xact, h.teid = 0; pkbuf = ogs_gtp2_build_echo_response(h.type, recovery, features); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_echo_response() failed"); + return; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/lib/nas/5gs/conv.c b/lib/nas/5gs/conv.c index 14e9334f1..8185393d1 100644 --- a/lib/nas/5gs/conv.c +++ b/lib/nas/5gs/conv.c @@ -81,25 +81,44 @@ char *ogs_nas_5gs_suci_from_mobile_identity( (ogs_nas_5gs_mobile_identity_suci_t *)mobile_identity->buffer; ogs_assert(mobile_identity_suci); - ogs_expect_or_return_val(mobile_identity_suci->h.supi_format == - OGS_NAS_5GS_SUPI_FORMAT_IMSI, NULL); - ogs_expect_or_return_val(mobile_identity_suci->protection_scheme_id == - OGS_PROTECTION_SCHEME_NULL || mobile_identity_suci->protection_scheme_id == - OGS_PROTECTION_SCHEME_PROFILE_A || mobile_identity_suci->protection_scheme_id == - OGS_PROTECTION_SCHEME_PROFILE_B, NULL); + if (mobile_identity_suci->h.supi_format != + OGS_NAS_5GS_SUPI_FORMAT_IMSI) { + ogs_error("Not implemented SUPI format [%d]", + mobile_identity_suci->h.supi_format); + return NULL; + } + if (mobile_identity_suci->protection_scheme_id != + OGS_PROTECTION_SCHEME_NULL && + mobile_identity_suci->protection_scheme_id != + OGS_PROTECTION_SCHEME_PROFILE_A && + mobile_identity_suci->protection_scheme_id != + OGS_PROTECTION_SCHEME_PROFILE_B) { + ogs_error("Not supported Protection-Scheme-Id [%d]", + mobile_identity_suci->protection_scheme_id); + return NULL; + } suci = ogs_msprintf("suci-%d-", mobile_identity_suci->h.supi_format); - ogs_expect_or_return_val(suci, NULL); + if (!suci) { + ogs_error("ogs_msprintf() failed"); + return NULL; + } ogs_nas_to_plmn_id(&plmn_id, &mobile_identity_suci->nas_plmn_id); if (ogs_plmn_id_mnc_len(&plmn_id) == 2) { suci = ogs_mstrcatf(suci, "%03d-%02d-", ogs_plmn_id_mcc(&plmn_id), ogs_plmn_id_mnc(&plmn_id)); - ogs_expect_or_return_val(suci, NULL); + if (!suci) { + ogs_error("ogs_mstrcatf() failed"); + return NULL; + } } else { suci = ogs_mstrcatf(suci, "%03d-%03d-", ogs_plmn_id_mcc(&plmn_id), ogs_plmn_id_mnc(&plmn_id)); - ogs_expect_or_return_val(suci, NULL); + if (!suci) { + ogs_error("ogs_mstrcatf() failed"); + return NULL; + } } memset(routing_indicator, 0, sizeof(routing_indicator)); diff --git a/lib/nas/5gs/encoder.c b/lib/nas/5gs/encoder.c index a8e2609e1..3058a54df 100644 --- a/lib/nas/5gs/encoder.c +++ b/lib/nas/5gs/encoder.c @@ -2817,7 +2817,10 @@ ogs_pkbuf_t *ogs_nas_5gmm_encode(ogs_nas_5gs_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); @@ -2984,7 +2987,10 @@ ogs_pkbuf_t *ogs_nas_5gsm_encode(ogs_nas_5gs_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); diff --git a/lib/nas/5gs/support/nas-message.py b/lib/nas/5gs/support/nas-message.py index 8345ead41..5e5da0ed5 100644 --- a/lib/nas/5gs/support/nas-message.py +++ b/lib/nas/5gs/support/nas-message.py @@ -886,7 +886,10 @@ f.write("""ogs_pkbuf_t *ogs_nas_5gmm_encode(ogs_nas_5gs_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); @@ -937,7 +940,10 @@ f.write("""ogs_pkbuf_t *ogs_nas_5gsm_encode(ogs_nas_5gs_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); diff --git a/lib/nas/5gs/types.c b/lib/nas/5gs/types.c index 36185e4c2..8d3dd2707 100644 --- a/lib/nas/5gs/types.c +++ b/lib/nas/5gs/types.c @@ -383,7 +383,10 @@ int ogs_nas_build_qos_flow_descriptions( ogs_assert(num_of_flow_description); buffer = ogs_calloc(1, OGS_NAS_MAX_QOS_FLOW_DESCRIPTIONS_LEN); - ogs_expect_or_return_val(buffer, OGS_ERROR); + if (!buffer) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } length = 0; for (i = 0; i < num_of_flow_description; i++) { @@ -528,7 +531,10 @@ int ogs_nas_build_qos_rules(ogs_nas_qos_rules_t *rules, ogs_assert(num_of_rule); buffer = ogs_calloc(1, OGS_NAS_MAX_QOS_RULES_LEN); - ogs_expect_or_return_val(buffer, OGS_ERROR); + if (!buffer) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } ogs_assert(buffer); length = 0; diff --git a/lib/nas/eps/encoder.c b/lib/nas/eps/encoder.c index 7b11df53d..498394066 100644 --- a/lib/nas/eps/encoder.c +++ b/lib/nas/eps/encoder.c @@ -3243,7 +3243,10 @@ ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_eps_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); @@ -3429,7 +3432,10 @@ ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_eps_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); diff --git a/lib/nas/eps/support/nas-message.py b/lib/nas/eps/support/nas-message.py index 4ea2fd724..d3ca2c013 100644 --- a/lib/nas/eps/support/nas-message.py +++ b/lib/nas/eps/support/nas-message.py @@ -913,7 +913,10 @@ f.write("""ogs_pkbuf_t *ogs_nas_emm_encode(ogs_nas_eps_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); @@ -976,7 +979,10 @@ f.write("""ogs_pkbuf_t *ogs_nas_esm_encode(ogs_nas_eps_message_t *message) /* The Packet Buffer(ogs_pkbuf_t) for NAS message MUST make a HEADROOM. * When calculating AES_CMAC, we need to use the headroom of the packet. */ pkbuf = ogs_pkbuf_alloc(NULL, OGS_MAX_SDU_LEN); - ogs_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return NULL; + } ogs_pkbuf_reserve(pkbuf, OGS_NAS_HEADROOM); ogs_pkbuf_put(pkbuf, OGS_MAX_SDU_LEN-OGS_NAS_HEADROOM); diff --git a/lib/ngap/message.c b/lib/ngap/message.c index 71f4a39d9..bcc57c55a 100644 --- a/lib/ngap/message.c +++ b/lib/ngap/message.c @@ -31,7 +31,10 @@ ogs_pkbuf_t *ogs_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_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_asn_encode() failed"); + return NULL; + } return pkbuf; } diff --git a/lib/pfcp/build.c b/lib/pfcp/build.c index bd3bef681..64e9c008b 100644 --- a/lib/pfcp/build.c +++ b/lib/pfcp/build.c @@ -70,7 +70,10 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_request(uint8_t type) ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &node_id_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } req->node_id.presence = 1; req->node_id.data = &node_id; req->node_id.len = node_id_len; @@ -103,7 +106,10 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_response(uint8_t type, ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &node_id_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } rsp->node_id.presence = 1; rsp->node_id.data = &node_id; rsp->node_id.len = node_id_len; @@ -143,7 +149,10 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_request(uint8_t type) ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &node_id_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } req->node_id.presence = 1; req->node_id.data = &node_id; req->node_id.len = node_id_len; @@ -199,7 +208,10 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_response(uint8_t type, ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &node_id_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } rsp->node_id.presence = 1; rsp->node_id.data = &node_id; rsp->node_id.len = node_id_len; diff --git a/lib/pfcp/context.c b/lib/pfcp/context.c index 173b8da3b..428a8f747 100644 --- a/lib/pfcp/context.c +++ b/lib/pfcp/context.c @@ -766,11 +766,17 @@ int ogs_pfcp_setup_far_gtpu_node(ogs_pfcp_far_t *far) if (!gnode) { gnode = ogs_gtp_node_add_by_ip( &ogs_gtp_self()->gtpu_peer_list, &ip, ogs_gtp_self()->gtpu_port); - ogs_expect_or_return_val(gnode, OGS_ERROR); + if (!gnode) { + ogs_error("ogs_gtp_node_add_by_ip() failed"); + return OGS_ERROR; + } rv = ogs_gtp_connect( ogs_gtp_self()->gtpu_sock, ogs_gtp_self()->gtpu_sock6, gnode); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_connect() failed"); + return rv; + } } OGS_SETUP_GTP_NODE(far, gnode); @@ -790,17 +796,26 @@ int ogs_pfcp_setup_pdr_gtpu_node(ogs_pfcp_pdr_t *pdr) if (pdr->f_teid_len == 0) return OGS_DONE; rv = ogs_pfcp_f_teid_to_ip(&pdr->f_teid, &ip); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_f_teid_to_ip() failed"); + return rv; + } gnode = ogs_gtp_node_find_by_ip(&ogs_gtp_self()->gtpu_peer_list, &ip); if (!gnode) { gnode = ogs_gtp_node_add_by_ip( &ogs_gtp_self()->gtpu_peer_list, &ip, ogs_gtp_self()->gtpu_port); - ogs_expect_or_return_val(gnode, OGS_ERROR); + if (!gnode) { + ogs_error("ogs_gtp_node_add_by_ip() failed"); + return OGS_ERROR; + } rv = ogs_gtp_connect( ogs_gtp_self()->gtpu_sock, ogs_gtp_self()->gtpu_sock6, gnode); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_connect() failed"); + return rv; + } } OGS_SETUP_GTP_NODE(pdr, gnode); diff --git a/lib/pfcp/conv.c b/lib/pfcp/conv.c index 46a9089be..67b3a181e 100644 --- a/lib/pfcp/conv.c +++ b/lib/pfcp/conv.c @@ -81,12 +81,19 @@ int ogs_pfcp_f_seid_to_sockaddr( ogs_assert(list); addr = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr, OGS_ERROR); + if (!addr) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } addr->ogs_sa_family = AF_INET; addr->ogs_sin_port = htobe16(port); addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t)); - ogs_expect_or_return_val(addr6, OGS_ERROR); + if (!addr6) { + ogs_error("ogs_calloc() failed"); + ogs_free(addr); + return OGS_ERROR; + } addr6->ogs_sa_family = AF_INET6; addr6->ogs_sin_port = htobe16(port); @@ -185,8 +192,14 @@ int ogs_pfcp_sockaddr_to_f_teid( { const int hdr_len = 5; - ogs_expect_or_return_val(addr || addr6, OGS_ERROR); - ogs_expect_or_return_val(f_teid, OGS_ERROR); + if (!addr && !addr6) { + ogs_error("No addr"); + return OGS_ERROR; + } + if (!f_teid) { + ogs_error("No F-TEID"); + return OGS_ERROR; + } memset(f_teid, 0, sizeof *f_teid); if (addr && addr6) { @@ -226,23 +239,35 @@ int ogs_pfcp_f_teid_to_sockaddr( if (f_teid->ipv4 && f_teid->ipv6) { *addr = ogs_calloc(1, sizeof(**addr)); - ogs_expect_or_return_val(*addr, OGS_ERROR); + if (!(*addr)) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } (*addr)->sin.sin_addr.s_addr = f_teid->both.addr; (*addr)->ogs_sa_family = AF_INET; *addr6 = ogs_calloc(1, sizeof(**addr6)); - ogs_expect_or_return_val(*addr6, OGS_ERROR); + if (!(*addr6)) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } memcpy((*addr6)->sin6.sin6_addr.s6_addr, f_teid->both.addr6, OGS_IPV6_LEN); (*addr6)->ogs_sa_family = AF_INET6; } else if (f_teid->ipv4) { *addr = ogs_calloc(1, sizeof(**addr)); - ogs_expect_or_return_val(*addr, OGS_ERROR); + if (!(*addr)) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } (*addr)->sin.sin_addr.s_addr = f_teid->addr; (*addr)->ogs_sa_family = AF_INET; } else if (f_teid->ipv6) { *addr6 = ogs_calloc(1, sizeof(**addr6)); - ogs_expect_or_return_val(*addr6, OGS_ERROR); + if (!(*addr6)) { + ogs_error("ogs_calloc() failed"); + return OGS_ERROR; + } memcpy((*addr6)->sin6.sin6_addr.s6_addr, f_teid->addr6, OGS_IPV6_LEN); (*addr6)->ogs_sa_family = AF_INET6; } else { diff --git a/lib/pfcp/handler.c b/lib/pfcp/handler.c index f8195103e..be48308b4 100644 --- a/lib/pfcp/handler.c +++ b/lib/pfcp/handler.c @@ -27,7 +27,10 @@ bool ogs_pfcp_handle_heartbeat_request( ogs_assert(xact); rv = ogs_pfcp_send_heartbeat_response(xact); - ogs_expect_or_return_val(rv == OGS_OK, false); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_send_heartbeat_response() failed"); + return false; + } return true; } @@ -192,7 +195,10 @@ bool ogs_pfcp_up_handle_pdr( memset(report, 0, sizeof(*report)); sendbuf = ogs_pkbuf_copy(recvbuf); - ogs_expect_or_return_val(sendbuf, false); + if (!sendbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return false; + } buffering = false; diff --git a/lib/pfcp/path.c b/lib/pfcp/path.c index 5969a7107..39ee6feaf 100644 --- a/lib/pfcp/path.c +++ b/lib/pfcp/path.c @@ -143,13 +143,22 @@ int ogs_pfcp_send_heartbeat_request(ogs_pfcp_node_t *node, h.seid = 0; xact = ogs_pfcp_xact_local_create(node, cb, node); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } pkbuf = ogs_pfcp_build_heartbeat_request(h.type); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_build_heartbeat_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -170,10 +179,16 @@ int ogs_pfcp_send_heartbeat_response(ogs_pfcp_xact_t *xact) h.seid = 0; pkbuf = ogs_pfcp_build_heartbeat_response(h.type); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_build_heartbeat_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -196,13 +211,22 @@ int ogs_pfcp_cp_send_association_setup_request(ogs_pfcp_node_t *node, h.seid = 0; xact = ogs_pfcp_xact_local_create(node, cb, node); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } pkbuf = ogs_pfcp_cp_build_association_setup_request(h.type); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_cp_build_association_setup_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -224,10 +248,16 @@ int ogs_pfcp_cp_send_association_setup_response(ogs_pfcp_xact_t *xact, h.seid = 0; pkbuf = ogs_pfcp_cp_build_association_setup_response(h.type, cause); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_cp_build_association_setup_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -250,13 +280,22 @@ int ogs_pfcp_up_send_association_setup_request(ogs_pfcp_node_t *node, h.seid = 0; xact = ogs_pfcp_xact_local_create(node, cb, node); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } pkbuf = ogs_pfcp_up_build_association_setup_request(h.type); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_build_heartbeat_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -278,10 +317,16 @@ int ogs_pfcp_up_send_association_setup_response(ogs_pfcp_xact_t *xact, h.seid = 0; pkbuf = ogs_pfcp_up_build_association_setup_response(h.type, cause); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pfcp_up_build_association_setup_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -355,7 +400,10 @@ int ogs_pfcp_send_end_marker(ogs_pfcp_pdr_t *pdr) } sendbuf = ogs_pkbuf_alloc(NULL, OGS_GTPV1U_5GC_HEADER_LEN); - ogs_expect_or_return_val(sendbuf, OGS_ERROR); + if (!sendbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return OGS_ERROR; + } ogs_pkbuf_reserve(sendbuf, OGS_GTPV1U_5GC_HEADER_LEN); memset(>p_hdesc, 0, sizeof(gtp_hdesc)); @@ -460,10 +508,16 @@ void ogs_pfcp_send_error_message( } pkbuf = ogs_pfcp_build_msg(&errmsg); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_pfcp_build_msg() failed"); + return; + } rv = ogs_pfcp_xact_update_tx(xact, &errmsg.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/lib/proto/types.c b/lib/proto/types.c index c20a938cb..7c87e8204 100644 --- a/lib/proto/types.c +++ b/lib/proto/types.c @@ -160,7 +160,10 @@ char *ogs_amf_id_to_string(ogs_amf_id_t *amf_id) ogs_assert(amf_id); str = ogs_calloc(1, OGS_AMFIDSTRLEN); - ogs_expect_or_return_val(str, NULL); + if (!str) { + ogs_error("ogs_calloc() failed"); + return NULL; + } ogs_hex_to_ascii(amf_id, sizeof(ogs_amf_id_t), str, OGS_AMFIDSTRLEN); @@ -457,8 +460,14 @@ int ogs_ip_to_sockaddr(ogs_ip_t *ip, uint16_t port, ogs_sockaddr_t **list) int ogs_sockaddr_to_ip( ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6, ogs_ip_t *ip) { - ogs_expect_or_return_val(ip, OGS_ERROR); - ogs_expect_or_return_val(addr || addr6, OGS_ERROR); + if (!ip) { + ogs_error("No IP"); + return OGS_ERROR; + } + if (!addr && !addr) { + ogs_error("No Address"); + return OGS_ERROR; + } memset(ip, 0, sizeof(ogs_ip_t)); @@ -487,7 +496,10 @@ char *ogs_ipv4_to_string(uint32_t addr) char *buf = NULL; buf = ogs_calloc(1, OGS_ADDRSTRLEN); - ogs_expect_or_return_val(buf, NULL); + if (!buf) { + ogs_error("ogs_calloc() failed"); + return NULL; + } return (char*)OGS_INET_NTOP(&addr, buf); } @@ -498,7 +510,10 @@ char *ogs_ipv6addr_to_string(uint8_t *addr6) ogs_assert(addr6); buf = ogs_calloc(1, OGS_ADDRSTRLEN); - ogs_expect_or_return_val(buf, NULL); + if (!buf) { + ogs_error("ogs_calloc() failed"); + return NULL; + } return (char *)OGS_INET6_NTOP(addr6, buf); } @@ -513,7 +528,10 @@ char *ogs_ipv6prefix_to_string(uint8_t *addr6, uint8_t prefixlen) memcpy(tmp, addr6, prefixlen >> 3); buf = ogs_calloc(1, OGS_ADDRSTRLEN); - ogs_expect_or_return_val(buf, NULL); + if (!buf) { + ogs_error("ogs_calloc() failed"); + return NULL; + } if (OGS_INET6_NTOP(tmp, buf) == NULL) { ogs_fatal("Invalid IPv6 address"); @@ -571,7 +589,10 @@ int ogs_ipv6prefix_from_string(uint8_t *addr6, uint8_t *prefixlen, char *string) ogs_assert(prefixlen); ogs_assert(string); pv = v = ogs_strdup(string); - ogs_expect_or_return_val(v, OGS_ERROR); + if (!v) { + ogs_error("ogs_strdup() failed"); + return OGS_ERROR; + } ipstr = strsep(&v, "/"); if (ipstr) @@ -584,7 +605,10 @@ int ogs_ipv6prefix_from_string(uint8_t *addr6, uint8_t *prefixlen, char *string) } rv = ogs_inet_pton(AF_INET6, ipstr, &tmp); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("ogs_inet_pton() failed"); + return rv; + } memcpy(addr6, tmp.sin6.sin6_addr.s6_addr, OGS_IPV6_LEN); *prefixlen = atoi(mask_or_numbits); diff --git a/lib/s1ap/message.c b/lib/s1ap/message.c index aca0dca68..b343454e6 100644 --- a/lib/s1ap/message.c +++ b/lib/s1ap/message.c @@ -31,7 +31,10 @@ 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_expect_or_return_val(pkbuf, NULL); + if (!pkbuf) { + ogs_error("ogs_asn_encode() failed"); + return NULL; + } return pkbuf; } diff --git a/lib/sbi/context.c b/lib/sbi/context.c index 1bac6c684..ce6788bf1 100644 --- a/lib/sbi/context.c +++ b/lib/sbi/context.c @@ -1798,7 +1798,6 @@ ogs_sbi_xact_t *ogs_sbi_xact_add( ogs_error("ogs_pool_alloc() failed"); return NULL; } - ogs_expect_or_return_val(xact, NULL); memset(xact, 0, sizeof(ogs_sbi_xact_t)); xact->sbi_object = sbi_object; diff --git a/lib/sbi/conv.c b/lib/sbi/conv.c index 74de6ed52..94ca23ace 100644 --- a/lib/sbi/conv.c +++ b/lib/sbi/conv.c @@ -89,7 +89,10 @@ char *ogs_supi_from_suci(char *suci) ogs_assert(suci); tmp = ogs_strdup(suci); - ogs_expect_or_return_val(tmp, NULL); + if (!tmp) { + ogs_error("ogs_strdup() failed"); + return NULL; + } p = tmp; i = 0; @@ -777,7 +780,10 @@ char *ogs_sbi_s_nssai_to_string(ogs_s_nssai_t *s_nssai) sNSSAI.sd = ogs_s_nssai_sd_to_string(s_nssai->sd); item = OpenAPI_snssai_convertToJSON(&sNSSAI); - ogs_expect_or_return_val(item, NULL); + if (!item) { + ogs_error("OpenAPI_snssai_convertToJSON() failed"); + return NULL; + } if (sNSSAI.sd) ogs_free(sNSSAI.sd); v = cJSON_Print(item); @@ -819,12 +825,23 @@ OpenAPI_plmn_id_t *ogs_sbi_build_plmn_id(ogs_plmn_id_t *plmn_id) ogs_assert(plmn_id); PlmnId = ogs_calloc(1, sizeof(*PlmnId)); - ogs_expect_or_return_val(PlmnId, NULL); + if (!PlmnId) { + ogs_error("ogs_calloc() failed"); + return NULL; + } PlmnId->mcc = ogs_plmn_id_mcc_string(plmn_id); - ogs_expect_or_return_val(PlmnId->mcc, NULL); + if (!PlmnId->mcc) { + ogs_error("ogs_plmn_id_mcc_string() failed"); + ogs_sbi_free_plmn_id(PlmnId); + return NULL; + } PlmnId->mnc = ogs_plmn_id_mnc_string(plmn_id); - ogs_expect_or_return_val(PlmnId->mnc, NULL); + if (!PlmnId->mnc) { + ogs_error("ogs_plmn_id_mnc_string() failed"); + ogs_sbi_free_plmn_id(PlmnId); + return NULL; + } return PlmnId; } @@ -862,12 +879,23 @@ OpenAPI_plmn_id_nid_t *ogs_sbi_build_plmn_id_nid(ogs_plmn_id_t *plmn_id) ogs_assert(plmn_id); PlmnIdNid = ogs_calloc(1, sizeof(*PlmnIdNid)); - ogs_expect_or_return_val(PlmnIdNid, NULL); + if (!PlmnIdNid) { + ogs_error("ogs_calloc() failed"); + return NULL; + } PlmnIdNid->mcc = ogs_plmn_id_mcc_string(plmn_id); - ogs_expect_or_return_val(PlmnIdNid->mcc, NULL); + if (!PlmnIdNid->mcc) { + ogs_error("ogs_plmn_id_mcc_string() failed"); + ogs_sbi_free_plmn_id_nid(PlmnIdNid); + return NULL; + } PlmnIdNid->mnc = ogs_plmn_id_mnc_string(plmn_id); - ogs_expect_or_return_val(PlmnIdNid->mnc, NULL); + if (!PlmnIdNid->mnc) { + ogs_error("ogs_plmn_id_mnc_string() failed"); + ogs_sbi_free_plmn_id_nid(PlmnIdNid); + return NULL; + } return PlmnIdNid; } @@ -907,12 +935,23 @@ OpenAPI_guami_t *ogs_sbi_build_guami(ogs_guami_t *guami) ogs_assert(guami); Guami = ogs_calloc(1, sizeof(*Guami)); - ogs_assert(Guami); + if (!Guami) { + ogs_error("ogs_calloc() failed"); + return NULL; + } Guami->plmn_id = ogs_sbi_build_plmn_id_nid(&guami->plmn_id); - ogs_expect_or_return_val(Guami->plmn_id, NULL); + if (!Guami->plmn_id) { + ogs_error("ogs_sbi_build_plmn_id_nid() failed"); + ogs_sbi_free_guami(Guami); + return NULL; + } Guami->amf_id = ogs_amf_id_to_string(&guami->amf_id); - ogs_expect_or_return_val(Guami->amf_id, NULL); + if (!Guami->amf_id) { + ogs_error("ogs_amf_id_to_string() failed"); + ogs_sbi_free_guami(Guami); + return NULL; + } return Guami; } @@ -951,24 +990,49 @@ OpenAPI_nr_location_t *ogs_sbi_build_nr_location( ogs_assert(tai); ogs_assert(nr_cgi); - Tai = ogs_calloc(1, sizeof(*Tai)); - ogs_expect_or_return_val(Tai, NULL); - Tai->plmn_id = ogs_sbi_build_plmn_id(&tai->plmn_id); - ogs_expect_or_return_val(Tai->plmn_id, NULL); - Tai->tac = ogs_uint24_to_0string(tai->tac); - ogs_expect_or_return_val(Tai->tac, NULL); - - Ncgi = ogs_calloc(1, sizeof(*Ncgi)); - ogs_expect_or_return_val(Ncgi, NULL); - Ncgi->plmn_id = ogs_sbi_build_plmn_id(&nr_cgi->plmn_id); - ogs_expect_or_return_val(Ncgi->plmn_id, NULL); - Ncgi->nr_cell_id = ogs_uint36_to_0string(nr_cgi->cell_id); - ogs_expect_or_return_val(Ncgi->nr_cell_id, NULL); - NrLocation = ogs_calloc(1, sizeof(*NrLocation)); - ogs_expect_or_return_val(NrLocation, NULL); - NrLocation->tai = Tai; - NrLocation->ncgi = Ncgi; + if (!NrLocation) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + NrLocation->tai = Tai = ogs_calloc(1, sizeof(*Tai)); + if (!Tai) { + ogs_error("ogs_calloc() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } + Tai->plmn_id = ogs_sbi_build_plmn_id(&tai->plmn_id); + if (!Tai->plmn_id) { + ogs_error("ogs_sbi_build_plmn_id() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } + Tai->tac = ogs_uint24_to_0string(tai->tac); + if (!Tai->tac) { + ogs_error("ogs_uint24_to_0string() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } + + NrLocation->ncgi = Ncgi = ogs_calloc(1, sizeof(*Ncgi)); + if (!Ncgi) { + ogs_error("ogs_calloc() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } + Ncgi->plmn_id = ogs_sbi_build_plmn_id(&nr_cgi->plmn_id); + if (!Ncgi->plmn_id) { + ogs_error("ogs_sbi_build_plmn_id() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } + Ncgi->nr_cell_id = ogs_uint36_to_0string(nr_cgi->cell_id); + if (!Ncgi->nr_cell_id) { + ogs_error("ogs_uint36_to_0string() failed"); + ogs_sbi_free_nr_location(NrLocation); + return NULL; + } return NrLocation; } diff --git a/lib/sbi/message.c b/lib/sbi/message.c index 73a8a180c..ccecfd882 100644 --- a/lib/sbi/message.c +++ b/lib/sbi/message.c @@ -196,13 +196,24 @@ ogs_sbi_request_t *ogs_sbi_request_new(void) ogs_sbi_request_t *request = NULL; ogs_pool_alloc(&request_pool, &request); - ogs_expect_or_return_val(request, NULL); + if (!request) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } memset(request, 0, sizeof(ogs_sbi_request_t)); request->http.params = ogs_hash_make(); - ogs_expect_or_return_val(request->http.params, NULL); + if (!request->http.params) { + ogs_error("ogs_hash_make() failed"); + ogs_sbi_request_free(request); + return NULL; + } request->http.headers = ogs_hash_make(); - ogs_expect_or_return_val(request->http.headers, NULL); + if (!request->http.headers) { + ogs_error("ogs_hash_make() failed"); + ogs_sbi_request_free(request); + return NULL; + } return request; } @@ -212,13 +223,24 @@ ogs_sbi_response_t *ogs_sbi_response_new(void) ogs_sbi_response_t *response = NULL; ogs_pool_alloc(&response_pool, &response); - ogs_expect_or_return_val(response, NULL); + if (!response) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } memset(response, 0, sizeof(ogs_sbi_response_t)); response->http.params = ogs_hash_make(); - ogs_expect_or_return_val(response->http.params, NULL); + if (!response->http.params) { + ogs_error("ogs_hash_make() failed"); + ogs_sbi_response_free(response); + return NULL; + } response->http.headers = ogs_hash_make(); - ogs_expect_or_return_val(response->http.headers, NULL); + if (!response->http.headers) { + ogs_error("ogs_hash_make() failed"); + ogs_sbi_response_free(response); + return NULL; + } return response; } @@ -260,37 +282,88 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) ogs_assert(message); request = ogs_sbi_request_new(); - ogs_expect_or_return_val(request, NULL); + if (!request) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } - ogs_expect_or_return_val(message->h.method, NULL); + if (!message->h.method) { + ogs_error("No Method"); + ogs_sbi_request_free(request); + return NULL; + } request->h.method = ogs_strdup(message->h.method); + if (!request->h.method) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_request_free(request); + return NULL; + } if (message->h.uri) { request->h.uri = ogs_strdup(message->h.uri); - ogs_expect_or_return_val(request->h.uri, NULL); + if (!request->h.uri) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_request_free(request); + return NULL; + } } else { - ogs_expect_or_return_val(message->h.service.name, NULL); + if (!message->h.service.name) { + ogs_error("No Service Name"); + ogs_sbi_request_free(request); + return NULL; + } request->h.service.name = ogs_strdup(message->h.service.name); - ogs_expect_or_return_val(message->h.api.version, NULL); + if (!request->h.service.name) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_request_free(request); + return NULL; + } + if (!message->h.api.version) { + ogs_error("No API Version"); + ogs_sbi_request_free(request); + return NULL; + } request->h.api.version = ogs_strdup(message->h.api.version); - ogs_expect_or_return_val(request->h.api.version, NULL); + if (!request->h.api.version) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_request_free(request); + return NULL; + } - ogs_expect_or_return_val(message->h.resource.component[0], NULL); + if (!message->h.resource.component[0]) { + ogs_error("No Resource"); + ogs_sbi_request_free(request); + return NULL; + } for (i = 0; i < OGS_SBI_MAX_NUM_OF_RESOURCE_COMPONENT && - message->h.resource.component[i]; i++) + message->h.resource.component[i]; i++) { request->h.resource.component[i] = ogs_strdup( message->h.resource.component[i]); + if (!request->h.resource.component[i]) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_request_free(request); + return NULL; + } + } } /* Discovery Parameter */ if (message->param.target_nf_type) { char *v = OpenAPI_nf_type_ToString(message->param.target_nf_type); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("OpenAPI_nf_type_ToString() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_TARGET_NF_TYPE, v); } if (message->param.requester_nf_type) { char *v = OpenAPI_nf_type_ToString(message->param.requester_nf_type); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("OpenAPI_nf_type_ToString() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_REQUESTER_NF_TYPE, v); } @@ -335,12 +408,20 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) } if (message->param.nf_type) { char *v = OpenAPI_nf_type_ToString(message->param.nf_type); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("OpenAPI_nf_type_ToString() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_NF_TYPE, v); } if (message->param.limit) { char *v = ogs_msprintf("%d", message->param.limit); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("OpenAPI_nf_type_ToString() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_LIMIT, v); ogs_free(v); } @@ -359,12 +440,20 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) cJSON *item = NULL; item = OpenAPI_plmn_id_convertToJSON(&plmn_id); - ogs_expect_or_return_val(item, NULL); + if (!item) { + ogs_error("OpenAPI_plmn_id_convertToJSON() failed"); + ogs_sbi_request_free(request); + return NULL; + } if (plmn_id.mnc) ogs_free(plmn_id.mnc); if (plmn_id.mcc) ogs_free(plmn_id.mcc); v = cJSON_Print(item); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("cJSON_Print() failed"); + ogs_sbi_request_free(request); + return NULL; + } cJSON_Delete(item); ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_PLMN_ID, v); @@ -373,13 +462,21 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) } if (message->param.single_nssai_presence) { char *v = ogs_sbi_s_nssai_to_string(&message->param.s_nssai); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("ogs_sbi_s_nssai_to_string() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_SINGLE_NSSAI, v); ogs_free(v); } if (message->param.snssai_presence) { char *v = ogs_sbi_s_nssai_to_string(&message->param.s_nssai); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("ogs_sbi_s_nssai_to_string() failed"); + ogs_sbi_request_free(request); + return NULL; + } ogs_sbi_header_set(request->http.params, OGS_SBI_PARAM_SNSSAI, v); ogs_free(v); } @@ -390,8 +487,16 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) char *v = NULL; cJSON *item = NULL; - ogs_expect_or_return_val(message->param.s_nssai.sst, NULL); - ogs_expect_or_return_val(message->param.roaming_indication, NULL); + if (!message->param.s_nssai.sst) { + ogs_error("No S-NSSAI SST"); + ogs_sbi_request_free(request); + return NULL; + } + if (!message->param.roaming_indication) { + ogs_error("No Roaming Indication"); + ogs_sbi_request_free(request); + return NULL; + } memset(&sNSSAI, 0, sizeof(sNSSAI)); sNSSAI.sst = message->param.s_nssai.sst; @@ -405,10 +510,19 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) item = OpenAPI_slice_info_for_pdu_session_convertToJSON( &SliceInfoForPDUSession); - ogs_expect_or_return_val(item, NULL); + if (!item) { + ogs_error("OpenAPI_slice_info_for_pdu_session_convertToJSON() " + "failed"); + ogs_sbi_request_free(request); + return NULL; + } v = cJSON_Print(item); - ogs_expect_or_return_val(v, NULL); + if (!v) { + ogs_error("cJSON_Print() failed"); + ogs_sbi_request_free(request); + return NULL; + } cJSON_Delete(item); ogs_sbi_header_set(request->http.params, @@ -427,8 +541,11 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message) OGS_SBI_PARAM_IPV6PREFIX, message->param.ipv6prefix); } - ogs_expect_or_return_val(true == - build_content(&request->http, message), NULL); + if (build_content(&request->http, message) == false) { + ogs_error("build_content() failed"); + ogs_sbi_request_free(request); + return NULL; + } if (message->http.accept) { ogs_sbi_header_set(request->http.headers, OGS_SBI_ACCEPT, @@ -489,13 +606,19 @@ ogs_sbi_response_t *ogs_sbi_build_response( ogs_assert(message); response = ogs_sbi_response_new(); - ogs_expect_or_return_val(response, NULL); + if (!response) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } response->status = status; if (response->status != OGS_SBI_HTTP_STATUS_NO_CONTENT) { - ogs_expect_or_return_val(true == - build_content(&response->http, message), NULL); + if (build_content(&response->http, message) == false) { + ogs_error("build_content() failed"); + ogs_sbi_response_free(response); + return NULL; + } } if (message->http.location) { @@ -2013,8 +2136,10 @@ static bool build_content( ogs_assert(http); if (message->num_of_part) { - ogs_expect_or_return_val(true == - build_multipart(http, message), false); + if (build_multipart(http, message) == false) { + ogs_error("build_multipart() failed"); + return false; + } } else { http->content = build_json(message); if (http->content) { @@ -2229,8 +2354,10 @@ static int parse_multipart( data.part[i].content_type; http->part[http->num_of_part].pkbuf = ogs_pkbuf_alloc(NULL, data.part[i].content_length); - ogs_expect_or_return_val( - http->part[http->num_of_part].pkbuf, OGS_ERROR); + if (!(http->part[http->num_of_part].pkbuf)) { + ogs_error("ogs_pkbuf_alloc() failed"); + return OGS_ERROR; + } ogs_pkbuf_put_data(http->part[http->num_of_part].pkbuf, data.part[i].content, data.part[i].content_length); @@ -2240,8 +2367,10 @@ static int parse_multipart( http->part[http->num_of_part].content_type; message->part[message->num_of_part].pkbuf = ogs_pkbuf_copy(http->part[http->num_of_part].pkbuf); - ogs_expect_or_return_val( - message->part[message->num_of_part].pkbuf, OGS_ERROR); + if (!(message->part[http->num_of_part].pkbuf)) { + ogs_error("ogs_pkbuf_alloc() failed"); + return OGS_ERROR; + } http->num_of_part++; message->num_of_part++; @@ -2286,7 +2415,10 @@ static bool build_multipart( ogs_base64_encode_binary(boundary + 2, digest, 16); p = http->content = ogs_calloc(1, OGS_HUGE_LEN); - ogs_expect_or_return_val(p, false); + if (!p) { + ogs_error("ogs_calloc() failed"); + return false; + } last = p + OGS_HUGE_LEN; /* First boundary */ @@ -2294,7 +2426,10 @@ static bool build_multipart( /* Encapsulated multipart part (application/json) */ json = build_json(message); - ogs_expect_or_return_val(json, false); + if (!json) { + ogs_error("build_json() failed"); + return false; + } p = ogs_slprintf(p, last, "%s\r\n\r\n%s", OGS_SBI_CONTENT_TYPE ": " OGS_SBI_CONTENT_JSON_TYPE, json); @@ -2319,7 +2454,10 @@ static bool build_multipart( content_type = ogs_msprintf("%s; boundary=\"%s\"", OGS_SBI_CONTENT_MULTIPART_TYPE, boundary); - ogs_expect_or_return_val(content_type, false); + if (!content_type) { + ogs_error("ogs_msprintf() failed"); + return false; + } ogs_sbi_header_set(http->headers, OGS_SBI_CONTENT_TYPE, content_type); @@ -2428,7 +2566,10 @@ char *ogs_sbi_discovery_option_build_service_names( ogs_assert(discovery_option); service_names = ogs_strdup(discovery_option->service_names[0]); - ogs_expect_or_return_val(service_names, NULL); + if (!service_names) { + ogs_error("ogs_strdup() failed"); + return NULL;; + } if (discovery_option->num_of_service_names > 1) { for (i = 1; i < discovery_option->num_of_service_names; i++) diff --git a/lib/sbi/path.c b/lib/sbi/path.c index 9668a3001..ddd0e9234 100644 --- a/lib/sbi/path.c +++ b/lib/sbi/path.c @@ -167,6 +167,7 @@ static int client_discover_cb( bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact) { + bool rc; ogs_sbi_client_t *client = NULL, *scp_client = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL; @@ -219,7 +220,6 @@ bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact) request->h.service.name, request->h.api.version); } } else { - bool rc; OpenAPI_uri_scheme_e scheme = OpenAPI_uri_scheme_NULL; ogs_sockaddr_t *addr = NULL; @@ -252,9 +252,10 @@ bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact) ogs_free(apiroot); - ogs_expect_or_return_val(true == - ogs_sbi_client_send_via_scp( - scp_client, ogs_sbi_client_handler, request, xact), false); + rc = ogs_sbi_client_send_via_scp( + scp_client, ogs_sbi_client_handler, request, xact); + ogs_expect(rc == true); + return rc; } else { /* @@ -273,9 +274,10 @@ bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact) nf_instance->id); } - ogs_expect_or_return_val(true == - ogs_sbi_client_send_via_scp( - scp_client, client_discover_cb, request, xact), false); + rc = ogs_sbi_client_send_via_scp( + scp_client, client_discover_cb, request, xact); + ogs_expect(rc == true); + return rc; } } else if (client) { @@ -284,9 +286,10 @@ bool ogs_sbi_discover_and_send(ogs_sbi_xact_t *xact) ***********************/ /* If `client` instance is available, use direct communication */ - ogs_expect_or_return_val(true == - ogs_sbi_client_send_request( - client, ogs_sbi_client_handler, request, xact), false); + rc = ogs_sbi_client_send_request( + client, ogs_sbi_client_handler, request, xact); + ogs_expect(rc == true); + return rc; } else { /********************************************** @@ -339,11 +342,17 @@ bool ogs_sbi_discover_only(ogs_sbi_xact_t *xact) ogs_sbi_service_type_to_name(service_type)); client = NF_INSTANCE_CLIENT(nf_instance); - ogs_expect_or_return_val(client, false); + if (!client) { + ogs_error("No Client"); + return false; + } request = ogs_nnrf_disc_build_discover( target_nf_type, requester_nf_type, discovery_option); - ogs_expect_or_return_val(request, false); + if (!request) { + ogs_error("ogs_nnrf_disc_build_discover() failed"); + return false; + } rc = ogs_sbi_client_send_request( client, ogs_sbi_client_handler, request, xact); @@ -363,6 +372,7 @@ bool ogs_sbi_discover_only(ogs_sbi_xact_t *xact) bool ogs_sbi_send_request_to_nf_instance( ogs_sbi_nf_instance_t *nf_instance, ogs_sbi_xact_t *xact) { + bool rc; ogs_sbi_request_t *request = NULL; ogs_sbi_client_t *client = NULL; @@ -411,17 +421,18 @@ bool ogs_sbi_send_request_to_nf_instance( ogs_freeaddrinfo(addr); } - ogs_expect_or_return_val(true == - ogs_sbi_send_request_to_client( - client, ogs_sbi_client_handler, request, xact), false); + rc = ogs_sbi_send_request_to_client( + client, ogs_sbi_client_handler, request, xact); + ogs_expect(rc == true); - return true; + return rc; } bool ogs_sbi_send_request_to_client( ogs_sbi_client_t *client, ogs_sbi_client_cb_f client_cb, ogs_sbi_request_t *request, void *data) { + bool rc; ogs_sbi_client_t *scp_client = NULL; char *apiroot = NULL; @@ -449,9 +460,9 @@ bool ogs_sbi_send_request_to_client( ogs_free(apiroot); - ogs_expect_or_return_val(true == - ogs_sbi_client_send_via_scp( - scp_client, client_cb, request, data), false); + rc = ogs_sbi_client_send_via_scp( + scp_client, client_cb, request, data); + ogs_expect(rc == true); } else { @@ -460,13 +471,13 @@ bool ogs_sbi_send_request_to_client( ***********************/ /* Direct communication since `client' instance is always avaiable */ - ogs_expect_or_return_val(true == - ogs_sbi_client_send_request( - client, client_cb, request, data), false); + rc = ogs_sbi_client_send_request( + client, client_cb, request, data); + ogs_expect(rc == true); } - return true; + return rc; } bool ogs_sbi_send_notification_request( @@ -474,6 +485,7 @@ bool ogs_sbi_send_notification_request( ogs_sbi_discovery_option_t *discovery_option, ogs_sbi_request_t *request, void *data) { + bool rc; ogs_sbi_client_t *client = NULL, *scp_client = NULL; OpenAPI_nf_type_e target_nf_type = OpenAPI_nf_type_NULL; @@ -498,9 +510,9 @@ bool ogs_sbi_send_notification_request( build_default_discovery_parameter( request, service_type, discovery_option); - ogs_expect_or_return_val(true == - ogs_sbi_client_send_via_scp( - scp_client, ogs_sbi_client_handler, request, data), false); + rc = ogs_sbi_client_send_via_scp( + scp_client, ogs_sbi_client_handler, request, data); + ogs_expect(rc == true); } else if (client) { @@ -509,9 +521,9 @@ bool ogs_sbi_send_notification_request( ***********************/ /* NRF is avaiable */ - ogs_expect_or_return_val(true == - ogs_sbi_client_send_request( - client, ogs_sbi_client_handler, request, data), false); + rc = ogs_sbi_client_send_request( + client, ogs_sbi_client_handler, request, data); + ogs_expect(rc == true); } else { @@ -520,6 +532,7 @@ bool ogs_sbi_send_notification_request( scp_client ? "SCP" : "No-SCP", ogs_sbi_service_type_to_name(service_type), request->h.service.name, request->h.api.version); + rc = false; ogs_assert_if_reached(); } @@ -536,7 +549,10 @@ bool ogs_sbi_send_response(ogs_sbi_stream_t *stream, int status) memset(&sendmsg, 0, sizeof(sendmsg)); response = ogs_sbi_build_response(&sendmsg, status); - ogs_expect_or_return_val(response, false); + if (!response) { + ogs_error("ogs_sbi_build_response() failed"); + return false; + } return ogs_sbi_server_send_response(stream, response); } diff --git a/src/bsf/context.c b/src/bsf/context.c index 90969df01..1d736ac57 100644 --- a/src/bsf/context.c +++ b/src/bsf/context.c @@ -229,10 +229,16 @@ bool bsf_sess_set_ipv4addr(bsf_sess_t *sess, char *ipv4addr_string) ogs_free(sess->ipv4addr_string); } rv = ogs_ipv4_from_string(&sess->ipv4addr, ipv4addr_string); - ogs_expect_or_return_val(rv == OGS_OK, false); + if (rv != OGS_OK) { + ogs_error("ogs_ipv4_from_string() failed"); + return false; + } sess->ipv4addr_string = ogs_strdup(ipv4addr_string); - ogs_expect_or_return_val(sess->ipv4addr_string, false); + if (!sess->ipv4addr_string) { + ogs_error("ogs_strdup() failed"); + return false; + } ogs_hash_set(self.ipv4addr_hash, &sess->ipv4addr, sizeof(sess->ipv4addr), sess); @@ -254,12 +260,18 @@ bool bsf_sess_set_ipv6prefix(bsf_sess_t *sess, char *ipv6prefix_string) } rv = ogs_ipv6prefix_from_string( sess->ipv6prefix.addr6, &sess->ipv6prefix.len, ipv6prefix_string); - ogs_expect_or_return_val(rv == OGS_OK, false); + if (rv != OGS_OK) { + ogs_error("ogs_ipv6prefix_from_string() failed"); + return false; + } ogs_assert(sess->ipv6prefix.len == OGS_IPV6_128_PREFIX_LEN); sess->ipv6prefix_string = ogs_strdup(ipv6prefix_string); - ogs_expect_or_return_val(sess->ipv6prefix_string, false); + if (!sess->ipv6prefix_string) { + ogs_error("ogs_strdup() failed"); + return false; + } ogs_hash_set(self.ipv6prefix_hash, &sess->ipv6prefix, (sess->ipv6prefix.len >> 3) + 1, sess); @@ -301,7 +313,10 @@ bsf_sess_t *bsf_sess_find_by_ipv4addr(char *ipv4addr_string) ogs_assert(ipv4addr_string); rv = ogs_ipv4_from_string(&ipv4addr, ipv4addr_string); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_ipv4_from_string() failed"); + return NULL; + } return ogs_hash_get(self.ipv4addr_hash, &ipv4addr, sizeof(ipv4addr)); } diff --git a/src/bsf/nbsf-handler.c b/src/bsf/nbsf-handler.c index 8186faeee..b3dba90cc 100644 --- a/src/bsf/nbsf-handler.c +++ b/src/bsf/nbsf-handler.c @@ -255,7 +255,7 @@ bool bsf_nbsf_management_handle_pcf_binding( ogs_assert(sess->pcf_ip[i].addr || sess->pcf_ip[i].addr6); PcfIpEndPoint = ogs_calloc(1, sizeof(*PcfIpEndPoint)); - ogs_expect_or_return_val(PcfIpEndPoint, NULL); + ogs_assert(PcfIpEndPoint); PcfIpEndPoint->ipv4_address = sess->pcf_ip[i].addr; PcfIpEndPoint->ipv6_address = sess->pcf_ip[i].addr6; diff --git a/src/hss/hss-s6a-path.c b/src/hss/hss-s6a-path.c index 42595866d..693494086 100644 --- a/src/hss/hss-s6a-path.c +++ b/src/hss/hss-s6a-path.c @@ -1285,13 +1285,28 @@ static void hss_s6a_cla_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(hss_s6a_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } ret = fd_msg_free(*msg); ogs_assert(ret == 0); @@ -1463,13 +1478,28 @@ static void hss_s6a_ida_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(hss_s6a_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } ret = fd_msg_free(*msg); ogs_assert(ret == 0); diff --git a/src/mme/mme-fd-path.c b/src/mme/mme-fd-path.c index 0d11d4f70..aa5df833d 100644 --- a/src/mme/mme-fd-path.c +++ b/src/mme/mme-fd-path.c @@ -842,13 +842,28 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(mme_s6a_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } mme_ue = sess_data->mme_ue; ogs_assert(mme_ue); @@ -1338,13 +1353,28 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(mme_s6a_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } mme_ue = sess_data->mme_ue; ogs_assert(mme_ue); @@ -1575,13 +1605,28 @@ static void mme_s6a_pua_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(mme_s6a_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } mme_ue = sess_data->mme_ue; ogs_assert(mme_ue); diff --git a/src/mme/mme-gtp-path.c b/src/mme/mme-gtp-path.c index 883b6d548..21f788b6b 100644 --- a/src/mme/mme-gtp-path.c +++ b/src/mme/mme-gtp-path.c @@ -225,10 +225,16 @@ int mme_gtp_send_create_session_request(mme_sess_t *sess, int create_action) h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_create_session_request(h.type, sess, create_action); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_create_session_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->create_action = create_action; xact->local_teid = mme_ue->mme_s11_teid; @@ -258,10 +264,16 @@ int mme_gtp_send_modify_bearer_request( h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_modify_bearer_request(h.type, mme_ue, uli_presence); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_modify_bearer_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->modify_action = modify_action; xact->local_teid = mme_ue->mme_s11_teid; @@ -291,10 +303,16 @@ int mme_gtp_send_delete_session_request( h.teid = sgw_ue->sgw_s11_teid; s11buf = mme_s11_build_delete_session_request(h.type, sess, action); - ogs_expect_or_return_val(s11buf, OGS_ERROR); + if (!s11buf) { + ogs_error("mme_s11_build_delete_session_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, s11buf, timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->delete_action = action; xact->local_teid = mme_ue->mme_s11_teid; @@ -372,10 +390,16 @@ int mme_gtp_send_create_bearer_response( h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_create_bearer_response(h.type, bearer, cause_value); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_create_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -411,10 +435,16 @@ int mme_gtp_send_update_bearer_response( h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_update_bearer_response(h.type, bearer, cause_value); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_update_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -450,10 +480,16 @@ int mme_gtp_send_delete_bearer_response( h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_delete_bearer_response(h.type, bearer, cause_value); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_delete_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -479,10 +515,16 @@ int mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue, int action) h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_release_access_bearers_request(h.type); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_release_access_bearers_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->release_action = action; xact->local_teid = mme_ue->mme_s11_teid; @@ -570,10 +612,16 @@ int mme_gtp_send_downlink_data_notification_ack( h.teid = sgw_ue->sgw_s11_teid; s11buf = mme_s11_build_downlink_data_notification_ack(h.type, cause_value); - ogs_expect_or_return_val(s11buf, OGS_ERROR); + if (!s11buf) { + ogs_error("mme_s11_build_downlink_data_notification_ack() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, s11buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -600,10 +648,17 @@ int mme_gtp_send_create_indirect_data_forwarding_tunnel_request( pkbuf = mme_s11_build_create_indirect_data_forwarding_tunnel_request( h.type, mme_ue); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_create_indirect_data_forwarding_" + "tunnel_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->local_teid = mme_ue->mme_s11_teid; rv = ogs_gtp_xact_commit(xact); @@ -631,11 +686,17 @@ int mme_gtp_send_delete_indirect_data_forwarding_tunnel_request( h.teid = sgw_ue->sgw_s11_teid; pkbuf = ogs_pkbuf_alloc(NULL, OGS_TLV_MAX_HEADROOM); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("ogs_pkbuf_alloc() failed"); + return OGS_ERROR; + } ogs_pkbuf_reserve(pkbuf, OGS_TLV_MAX_HEADROOM); xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, mme_ue); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->delete_indirect_action = action; xact->local_teid = mme_ue->mme_s11_teid; @@ -667,10 +728,16 @@ int mme_gtp_send_bearer_resource_command( h.teid = sgw_ue->sgw_s11_teid; pkbuf = mme_s11_build_bearer_resource_command(h.type, bearer, nas_message); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("mme_s11_build_bearer_resource_command() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sgw_ue->gnode, &h, pkbuf, timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->xid |= OGS_GTP_CMD_XACT_ID; xact->local_teid = mme_ue->mme_s11_teid; diff --git a/src/mme/mme-s11-build.c b/src/mme/mme-s11-build.c index b42c3e8c6..bf7f67df0 100644 --- a/src/mme/mme-s11-build.c +++ b/src/mme/mme-s11-build.c @@ -558,7 +558,10 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response( enb_s1u_teid.interface_type = OGS_GTP2_F_TEID_S1_U_ENODEB_GTP_U; enb_s1u_teid.teid = htobe32(bearer->enb_s1u_teid); rv = ogs_gtp2_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_ip_to_f_teid() failed"); + return NULL; + } rsp->bearer_contexts.s1_u_enodeb_f_teid.presence = 1; rsp->bearer_contexts.s1_u_enodeb_f_teid.data = &enb_s1u_teid; rsp->bearer_contexts.s1_u_enodeb_f_teid.len = len; @@ -568,7 +571,10 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response( sgw_s1u_teid.interface_type = OGS_GTP2_F_TEID_S1_U_SGW_GTP_U; sgw_s1u_teid.teid = htobe32(bearer->sgw_s1u_teid); rv = ogs_gtp2_ip_to_f_teid(&bearer->sgw_s1u_ip, &sgw_s1u_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_ip_to_f_teid() failed"); + return NULL; + } rsp->bearer_contexts.s4_u_sgsn_f_teid.presence = 1; rsp->bearer_contexts.s4_u_sgsn_f_teid.data = &sgw_s1u_teid; rsp->bearer_contexts.s4_u_sgsn_f_teid.len = OGS_GTP2_F_TEID_IPV4_LEN; @@ -886,7 +892,10 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request( dl_teid[i].teid = htobe32(bearer->enb_dl_teid); rv = ogs_gtp2_ip_to_f_teid( &bearer->enb_dl_ip, &dl_teid[i], &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_ip_to_f_teid() failed"); + return NULL; + } req->bearer_contexts[i].s1_u_enodeb_f_teid.presence = 1; req->bearer_contexts[i].s1_u_enodeb_f_teid.data = &dl_teid[i]; req->bearer_contexts[i].s1_u_enodeb_f_teid.len = len; @@ -899,7 +908,10 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request( ul_teid[i].teid = htobe32(bearer->enb_ul_teid); rv = ogs_gtp2_ip_to_f_teid( &bearer->enb_ul_ip, &ul_teid[i], &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_ip_to_f_teid() failed"); + return NULL; + } req->bearer_contexts[i].s12_rnc_f_teid.presence = 1; req->bearer_contexts[i].s12_rnc_f_teid.data = &ul_teid[i]; req->bearer_contexts[i].s12_rnc_f_teid.len = len; diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 7763d94c8..eacbf1c9a 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -125,7 +125,10 @@ void mme_s11_handle_create_session_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /************************ * Getting Cause Value @@ -461,7 +464,10 @@ void mme_s11_handle_modify_bearer_response( ogs_assert(sgw_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /************************ * Getting Cause Value @@ -576,7 +582,10 @@ void mme_s11_handle_delete_session_response( } rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /************************ * Check MME-UE Context @@ -627,7 +636,10 @@ void mme_s11_handle_delete_session_response( } else if (action == OGS_GTP_DELETE_SEND_DEACTIVATE_BEARER_CONTEXT_REQUEST) { mme_bearer_t *bearer = mme_default_bearer_in_sess(sess); - ogs_expect_or_return(bearer); + if (!bearer) { + ogs_error("No Bearer"); + return; + } r = nas_eps_send_deactivate_bearer_context_request(bearer); ogs_expect(r == OGS_OK); @@ -842,9 +854,12 @@ void mme_s11_handle_create_bearer_request( ogs_gtp2_f_teid_to_ip(pgw_s5u_teid, &bearer->pgw_s5u_ip)); /* Bearer QoS */ - ogs_expect_or_return(ogs_gtp2_parse_bearer_qos(&bearer_qos, - &req->bearer_contexts.bearer_level_qos) == - req->bearer_contexts.bearer_level_qos.len); + if (ogs_gtp2_parse_bearer_qos( + &bearer_qos, &req->bearer_contexts.bearer_level_qos) != + req->bearer_contexts.bearer_level_qos.len) { + ogs_error("ogs_gtp2_parse_bearer_qos() failed"); + return; + } bearer->qos.index = bearer_qos.qci; bearer->qos.arp.priority_level = bearer_qos.priority_level; bearer->qos.arp.pre_emption_capability = @@ -882,7 +897,10 @@ void mme_s11_handle_create_bearer_request( /* Before Activate DEDICATED bearer, check DEFAULT bearer status */ default_bearer = mme_default_bearer_in_sess(sess); - ogs_expect_or_return(default_bearer); + if (!default_bearer) { + ogs_error("No Default Bearer"); + return; + } if (OGS_FSM_CHECK(&default_bearer->sm, esm_state_active)) { if (ECM_IDLE(mme_ue)) { @@ -988,9 +1006,12 @@ void mme_s11_handle_update_bearer_request( if (req->bearer_contexts.bearer_level_qos.presence == 1) { /* Bearer QoS */ - ogs_expect_or_return(ogs_gtp2_parse_bearer_qos(&bearer_qos, - &req->bearer_contexts.bearer_level_qos) == - req->bearer_contexts.bearer_level_qos.len); + if (ogs_gtp2_parse_bearer_qos( + &bearer_qos, &req->bearer_contexts.bearer_level_qos) != + req->bearer_contexts.bearer_level_qos.len) { + ogs_error("ogs_gtp2_parse_bearer_qos() failed"); + return; + } bearer->qos.index = bearer_qos.qci; bearer->qos.arp.priority_level = bearer_qos.priority_level; bearer->qos.arp.pre_emption_capability = @@ -1195,7 +1216,10 @@ void mme_s11_handle_release_access_bearers_response( ogs_assert(sgw_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /*********************** * Check MME-UE Context @@ -1492,7 +1516,10 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( ogs_assert(sgw_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /************************ * Getting Cause Value @@ -1562,7 +1589,10 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response( bearer = mme_bearer_find_by_ue_ebi(mme_ue, rsp->bearer_contexts[i].eps_bearer_id.u8); - ogs_expect_or_return(bearer); + if (!bearer) { + ogs_error("No Bearer"); + return; + } if (rsp->bearer_contexts[i].s4_u_sgsn_f_teid.presence) { teid = rsp->bearer_contexts[i].s4_u_sgsn_f_teid.data; @@ -1617,7 +1647,10 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response( ogs_assert(sgw_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } /************************ * Getting Cause Value @@ -1721,7 +1754,10 @@ void mme_s11_handle_bearer_resource_failure_indication( ogs_assert(sgw_ue); rv = ogs_gtp_xact_commit(xact); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_commit() failed"); + return; + } if (!mme_ue_from_teid) ogs_error("No Context in TEID"); diff --git a/src/mme/sgsap-handler.c b/src/mme/sgsap-handler.c index 07c5f0378..0bf60357a 100644 --- a/src/mme/sgsap-handler.c +++ b/src/mme/sgsap-handler.c @@ -50,7 +50,7 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); if (!root) { - ogs_error("!root"); + ogs_error("ogs_tlv_parse_block() failed"); goto error; } @@ -154,7 +154,7 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); if (!root) { - ogs_error("!root"); + ogs_error("ogs_tlv_parse_block() failed"); goto error; } @@ -199,7 +199,10 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) goto error; } - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_debug(" IMSI[%s] CAUSE[%d]", mme_ue->imsi_bcd, emm_cause); if (lai) { @@ -239,13 +242,18 @@ void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_debug("[SGSAP] EPS-DETACH-ACK"); else if (type == SGSAP_IMSI_DETACH_ACK) ogs_debug("[SGSAP] IMSI-DETACH-ACK"); - else - ogs_expect_or_return(0); + else { + ogs_error("Unknown type [%d]", type); + return; + } ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - ogs_expect_or_return(root); + if (!root) { + ogs_error("ogs_tlv_parse_block() failed"); + return; + } iter = root; while (iter) { @@ -263,17 +271,28 @@ void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_tlv_free_all(root); - ogs_expect_or_return(nas_mobile_identity_imsi); - ogs_expect_or_return(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN); + if (!nas_mobile_identity_imsi) { + ogs_error("No IMSI"); + return; + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("Invalid IMSI len [%d]", nas_mobile_identity_imsi_len); + return; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else - ogs_expect_or_return(0); + } else { + ogs_error("Unknown type [%d]", nas_mobile_identity_imsi->type); + return; + } - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); @@ -302,7 +321,10 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - ogs_expect_or_return(root); + if (!root) { + ogs_error("ogs_tlv_parse_block() failed"); + return; + } iter = root; while (iter) { @@ -331,16 +353,24 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_tlv_free_all(root); - ogs_expect_or_return(nas_mobile_identity_imsi); - ogs_expect_or_return(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN); + if (!nas_mobile_identity_imsi) { + ogs_error("No IMSI"); + return; + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("Invalid IMSI len [%d]", nas_mobile_identity_imsi_len); + return; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else - ogs_expect_or_return(0); + } else { + ogs_error("Unknown type [%d]", nas_mobile_identity_imsi->type); + return; + } if (mme_ue) { ogs_assert(service_indicator); @@ -423,7 +453,10 @@ void sgsap_handle_downlink_unitdata(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - ogs_assert(root); + if (!root) { + ogs_error("ogs_tlv_parse_block() failed"); + return; + } iter = root; while (iter) { @@ -458,7 +491,10 @@ void sgsap_handle_downlink_unitdata(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) } else ogs_assert_if_reached(); - ogs_expect_or_return(mme_ue); + if (!mme_ue) { + ogs_error("No UE(mme-ue) context"); + return; + } ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); ogs_log_hexdump(OGS_LOG_DEBUG, @@ -499,7 +535,10 @@ void sgsap_handle_release_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - ogs_expect_or_return(root); + if (!root) { + ogs_error("ogs_tlv_parse_block() failed"); + return; + } iter = root; while (iter) { @@ -517,16 +556,24 @@ void sgsap_handle_release_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_tlv_free_all(root); - ogs_expect_or_return(nas_mobile_identity_imsi); - ogs_expect_or_return(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN); + if (!nas_mobile_identity_imsi) { + ogs_error("No IMSI"); + return; + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("Invalid IMSI len [%d]", nas_mobile_identity_imsi_len); + return; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else - ogs_expect_or_return(0); + } else { + ogs_error("Unknown type [%d]", nas_mobile_identity_imsi->type); + return; + } if (mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); @@ -553,7 +600,10 @@ void sgsap_handle_mm_information_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_pkbuf_pull(pkbuf, 1); root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1); - ogs_expect_or_return(root); + if (!root) { + ogs_error("ogs_tlv_parse_block() failed"); + return; + } iter = root; while (iter) { @@ -574,16 +624,24 @@ void sgsap_handle_mm_information_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_tlv_free_all(root); - ogs_expect_or_return(nas_mobile_identity_imsi); - ogs_expect_or_return(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN); + if (!nas_mobile_identity_imsi) { + ogs_error("No IMSI"); + return; + } + if (nas_mobile_identity_imsi_len != SGSAP_IE_IMSI_LEN) { + ogs_error("Invalid IMSI len [%d]", nas_mobile_identity_imsi_len); + return; + } if (nas_mobile_identity_imsi->type == OGS_NAS_MOBILE_IDENTITY_IMSI) { ogs_nas_eps_imsi_to_bcd(nas_mobile_identity_imsi, nas_mobile_identity_imsi_len, imsi_bcd); mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd); - } else - ogs_expect_or_return(0); + } else { + ogs_error("Unknown type [%d]", nas_mobile_identity_imsi->type); + return; + } if (mme_ue) ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd); diff --git a/src/mme/sgsap-sm.c b/src/mme/sgsap-sm.c index f8dd3a37c..d72cc4725 100644 --- a/src/mme/sgsap-sm.c +++ b/src/mme/sgsap-sm.c @@ -40,7 +40,10 @@ void sgsap_state_initial(ogs_fsm_t *s, mme_event_t *e) vlr->t_conn = ogs_timer_add(ogs_app()->timer_mgr, mme_timer_sgs_cli_conn_to_srv, vlr); - ogs_expect_or_return(vlr->t_conn); + if (!vlr->t_conn) { + ogs_error("ogs_timer_add() failed"); + return; + } OGS_FSM_TRAN(s, &sgsap_state_will_connect); } diff --git a/src/nrf/nnrf-handler.c b/src/nrf/nnrf-handler.c index 78fc17b17..4acb0e3d2 100644 --- a/src/nrf/nnrf-handler.c +++ b/src/nrf/nnrf-handler.c @@ -205,7 +205,11 @@ bool nrf_nnrf_handle_nf_status_subscribe( if (SubscriptionData->req_nf_instance_id) { subscription_data->req_nf_instance_id = ogs_strdup(SubscriptionData->req_nf_instance_id); - ogs_expect_or_return_val(subscription_data->req_nf_instance_id, NULL); + if (!subscription_data->req_nf_instance_id) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_subscription_data_remove(subscription_data); + return NULL; + } } if (SubscriptionData->subscription_id) { @@ -214,7 +218,11 @@ bool nrf_nnrf_handle_nf_status_subscribe( ogs_free(SubscriptionData->subscription_id); } SubscriptionData->subscription_id = ogs_strdup(subscription_data->id); - ogs_expect_or_return_val(SubscriptionData->subscription_id, NULL); + if (!SubscriptionData->subscription_id) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_subscription_data_remove(subscription_data); + return NULL; + } if (SubscriptionData->requester_features) { subscription_data->requester_features = @@ -231,7 +239,11 @@ bool nrf_nnrf_handle_nf_status_subscribe( OGS_SBI_NNRF_NFM_SERVICE_MAP); SubscriptionData->nrf_supported_features = ogs_uint64_to_string(subscription_data->nrf_supported_features); - ogs_expect_or_return_val(SubscriptionData->nrf_supported_features, NULL); + if (!SubscriptionData->nrf_supported_features) { + ogs_error("ogs_strdup() failed"); + ogs_sbi_subscription_data_remove(subscription_data); + return NULL; + } SubscrCond = SubscriptionData->subscr_cond; if (SubscrCond) { @@ -404,7 +416,10 @@ bool nrf_nnrf_handle_nf_profile_retrieval( OGS_SBI_FEATURES_SET(supported_features, OGS_SBI_NNRF_NFM_SERVICE_MAP); sendmsg.NFProfile = ogs_nnrf_nfm_build_nf_profile( nf_instance, NULL, NULL, supported_features); - ogs_expect_or_return_val(sendmsg.NFProfile, NULL); + if (!sendmsg.NFProfile) { + ogs_error("ogs_nnrf_nfm_build_nf_profile() failed"); + return false; + } response = ogs_sbi_build_response(&sendmsg, OGS_SBI_HTTP_STATUS_OK); ogs_assert(response); diff --git a/src/pcf/context.c b/src/pcf/context.c index bf8456890..7a6281df6 100644 --- a/src/pcf/context.c +++ b/src/pcf/context.c @@ -367,10 +367,16 @@ bool pcf_sess_set_ipv4addr(pcf_sess_t *sess, char *ipv4addr_string) clear_ipv4addr(sess); rv = ogs_ipv4_from_string(&sess->ipv4addr, ipv4addr_string); - ogs_expect_or_return_val(rv == OGS_OK, false); + if (rv != OGS_OK) { + ogs_error("ogs_ipv4_from_string() failed"); + return false; + } sess->ipv4addr_string = ogs_strdup(ipv4addr_string); - ogs_expect_or_return_val(sess->ipv4addr_string, false); + if (!sess->ipv4addr_string) { + ogs_error("ogs_strdup() failed"); + return false; + } ogs_hash_set(self.ipv4addr_hash, &sess->ipv4addr, sizeof(sess->ipv4addr), sess); @@ -389,12 +395,18 @@ bool pcf_sess_set_ipv6prefix(pcf_sess_t *sess, char *ipv6prefix_string) rv = ogs_ipv6prefix_from_string( sess->ipv6prefix.addr6, &sess->ipv6prefix.len, ipv6prefix_string); - ogs_expect_or_return_val(rv == OGS_OK, false); + if (rv != OGS_OK) { + ogs_error("ogs_ipv6prefix_from_string() failed"); + return false; + } ogs_assert(sess->ipv6prefix.len == OGS_IPV6_128_PREFIX_LEN); sess->ipv6prefix_string = ogs_strdup(ipv6prefix_string); - ogs_expect_or_return_val(sess->ipv6prefix_string, false); + if (!sess->ipv6prefix_string) { + ogs_error("ogs_strdup() failed"); + return false; + } ogs_hash_set(self.ipv6prefix_hash, &sess->ipv6prefix, (sess->ipv6prefix.len >> 3) + 1, sess); @@ -431,7 +443,10 @@ pcf_sess_t *pcf_sess_find_by_ipv4addr(char *ipv4addr_string) ogs_assert(ipv4addr_string); rv = ogs_ipv4_from_string(&ipv4addr, ipv4addr_string); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_ipv4_from_string() failed"); + return NULL; + } return ogs_hash_get(self.ipv4addr_hash, &ipv4addr, sizeof(ipv4addr)); } @@ -465,7 +480,10 @@ pcf_sess_t *pcf_sess_find_by_ipv6addr(char *ipv6addr_string) ogs_assert(ipv6addr_string); rv = ogs_inet_pton(AF_INET6, ipv6addr_string, &tmp); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_inet_pton() failed"); + return NULL; + } memcpy(ipv6prefix.addr6, tmp.sin6.sin6_addr.s6_addr, OGS_IPV6_LEN); ipv6prefix.len = OGS_IPV6_128_PREFIX_LEN; diff --git a/src/pcrf/pcrf-gx-path.c b/src/pcrf/pcrf-gx-path.c index fb9d19873..edfdc2e08 100644 --- a/src/pcrf/pcrf-gx-path.c +++ b/src/pcrf/pcrf-gx-path.c @@ -71,15 +71,25 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->sid, NULL); + if (!new->sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } ogs_list_init(&new->rx_list); + ogs_thread_mutex_unlock(&sess_state_mutex); + return new; } @@ -92,17 +102,27 @@ static struct rx_sess_state *add_rx_state(struct sess_state *gx, os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&rx_sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->sid, NULL); + if (!new->sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&rx_sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } new->gx = gx; ogs_list_add(&gx->rx_list, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return new; } diff --git a/src/pcrf/pcrf-rx-path.c b/src/pcrf/pcrf-rx-path.c index c613796d4..03dbc47c2 100644 --- a/src/pcrf/pcrf-rx-path.c +++ b/src/pcrf/pcrf-rx-path.c @@ -51,12 +51,22 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->rx_sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->rx_sid, NULL); + if (!new->rx_sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } + + ogs_thread_mutex_unlock(&sess_state_mutex); return new; } diff --git a/src/sgwc/gtp-path.c b/src/sgwc/gtp-path.c index 633b637cc..906ab4436 100644 --- a/src/sgwc/gtp-path.c +++ b/src/sgwc/gtp-path.c @@ -185,10 +185,16 @@ int sgwc_gtp_send_create_session_response( h.teid = sgwc_ue->mme_s11_teid; pkbuf = sgwc_s11_build_create_session_response(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgwc_s11_build_create_session_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -226,11 +232,17 @@ int sgwc_gtp_send_downlink_data_notification( h.teid = sgwc_ue->mme_s11_teid; pkbuf = sgwc_s11_build_downlink_data_notification(cause_value, bearer); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("sgwc_s11_build_downlink_data_notification() failed"); + return OGS_ERROR; + } gtp_xact = ogs_gtp_xact_local_create( sgwc_ue->gnode, &h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return_val(gtp_xact, OGS_ERROR); + if (!gtp_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } gtp_xact->local_teid = sgwc_ue->sgw_s11_teid; rv = ogs_gtp_xact_commit(gtp_xact); diff --git a/src/sgwc/pfcp-path.c b/src/sgwc/pfcp-path.c index 7485759d1..e7106187d 100644 --- a/src/sgwc/pfcp-path.c +++ b/src/sgwc/pfcp-path.c @@ -217,10 +217,16 @@ int sgwc_pfcp_send_bearer_to_modify_list( h.seid = sess->sgwu_sxa_seid; sxabuf = sgwc_sxa_build_bearer_to_modify_list(h.type, sess, xact); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwc_sxa_build_bearer_to_modify_list() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -239,12 +245,18 @@ int sgwc_pfcp_send_session_establishment_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_xact = gtp_xact; if (gtpbuf) { xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); - ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); + if (!xact->gtpbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } } xact->local_seid = sess->sgwc_sxa_seid; @@ -253,10 +265,16 @@ int sgwc_pfcp_send_session_establishment_request( h.seid = sess->sgwu_sxa_seid; sxabuf = sgwc_sxa_build_session_establishment_request(h.type, sess); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwc_sxa_build_session_establishment_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -274,13 +292,19 @@ int sgwc_pfcp_send_session_modification_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_xact = gtp_xact; xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION; if (gtpbuf) { xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); - ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); + if (!xact->gtpbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } } xact->local_seid = sess->sgwc_sxa_seid; @@ -305,13 +329,19 @@ int sgwc_pfcp_send_bearer_modification_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, bearer_timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_xact = gtp_xact; xact->modify_flags = flags; if (gtpbuf) { xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); - ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); + if (!xact->gtpbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } } xact->local_seid = sess->sgwc_sxa_seid; @@ -322,10 +352,16 @@ int sgwc_pfcp_send_bearer_modification_request( h.seid = sess->sgwu_sxa_seid; sxabuf = sgwc_sxa_build_bearer_to_modify_list(h.type, sess, xact); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwc_sxa_build_bearer_to_modify_list() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -344,12 +380,18 @@ int sgwc_pfcp_send_session_deletion_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_xact = gtp_xact; if (gtpbuf) { xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); - ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); + if (!xact->gtpbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } } xact->local_seid = sess->sgwc_sxa_seid; @@ -358,10 +400,16 @@ int sgwc_pfcp_send_session_deletion_request( h.seid = sess->sgwu_sxa_seid; sxabuf = sgwc_sxa_build_session_deletion_request(h.type, sess); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwc_sxa_build_session_deletion_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -381,10 +429,16 @@ int sgwc_pfcp_send_session_report_response( h.seid = sess->sgwu_sxa_seid; sxabuf = ogs_pfcp_build_session_report_response(h.type, cause); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("ogs_pfcp_build_session_report_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/src/sgwc/s11-handler.c b/src/sgwc/s11-handler.c index 1f5595458..61f409ca0 100644 --- a/src/sgwc/s11-handler.c +++ b/src/sgwc/s11-handler.c @@ -656,11 +656,17 @@ void sgwc_s11_handle_delete_session_request( message->h.teid = sess->pgw_s5c_teid; gtpbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(gtpbuf); + if (!gtpbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &message->h, gtpbuf, gtp_sess_timeout, sess); - ogs_expect_or_return(s5c_xact); + if (!s5c_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s5c_xact->local_teid = sess->sgw_s5c_teid; ogs_gtp_xact_associate(s11_xact, s5c_xact); @@ -951,10 +957,16 @@ void sgwc_s11_handle_update_bearer_response( message->h.teid = sess->pgw_s5c_teid; pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s5c_xact, &message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); @@ -1470,11 +1482,17 @@ void sgwc_s11_handle_bearer_resource_command( message->h.teid = sess->pgw_s5c_teid; pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &message->h, pkbuf, gtp_bearer_timeout, bearer); - ogs_expect_or_return(s5c_xact); + if (!s5c_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s5c_xact->local_teid = sess->sgw_s5c_teid; ogs_gtp_xact_associate(s11_xact, s5c_xact); diff --git a/src/sgwc/s5c-handler.c b/src/sgwc/s5c-handler.c index dd0a7a597..377a7d5e2 100644 --- a/src/sgwc/s5c-handler.c +++ b/src/sgwc/s5c-handler.c @@ -423,10 +423,16 @@ void sgwc_s5c_handle_modify_bearer_response( message->h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -726,19 +732,28 @@ void sgwc_s5c_handle_update_bearer_request( message->h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } s11_xact = s5c_xact->assoc_xact; if (!s11_xact) { s11_xact = ogs_gtp_xact_local_create( sgwc_ue->gnode, &message->h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return(s11_xact); + if (!s11_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s11_xact->local_teid = sgwc_ue->sgw_s11_teid; ogs_gtp_xact_associate(s5c_xact, s11_xact); } else { rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } } s11_xact->local_teid = sgwc_ue->sgw_s11_teid; @@ -858,7 +873,10 @@ void sgwc_s5c_handle_delete_bearer_request( message->h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } s11_xact = s5c_xact->assoc_xact; if (!s11_xact) { @@ -878,7 +896,10 @@ void sgwc_s5c_handle_delete_bearer_request( */ s11_xact = ogs_gtp_xact_local_create( sgwc_ue->gnode, &message->h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return(s11_xact); + if (!s11_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s11_xact->local_teid = sgwc_ue->sgw_s11_teid; ogs_gtp_xact_associate(s5c_xact, s11_xact); @@ -889,7 +910,10 @@ void sgwc_s5c_handle_delete_bearer_request( * 3. MME sends Delete Bearer Response(DEDICATED BEARER) to SGW/SMF. */ rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } } s11_xact->local_teid = sgwc_ue->sgw_s11_teid; diff --git a/src/sgwc/sxa-build.c b/src/sgwc/sxa-build.c index 503f51511..bafd5fcd5 100644 --- a/src/sgwc/sxa-build.c +++ b/src/sgwc/sxa-build.c @@ -47,7 +47,10 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } req->node_id.presence = 1; req->node_id.data = &node_id; req->node_id.len = len; @@ -56,7 +59,10 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( rv = ogs_pfcp_sockaddr_to_f_seid( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, &f_seid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + return NULL; + } f_seid.seid = htobe64(sess->sgwc_sxa_seid); req->cp_f_seid.presence = 1; req->cp_f_seid.data = &f_seid; diff --git a/src/sgwc/sxa-handler.c b/src/sgwc/sxa-handler.c index c86c95962..9bd17f163 100644 --- a/src/sgwc/sxa-handler.c +++ b/src/sgwc/sxa-handler.c @@ -376,12 +376,18 @@ void sgwc_sxa_handle_session_establishment_response( } pkbuf = ogs_gtp2_build_msg(&send_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } ogs_assert(sess->gnode); s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &send_message.h, pkbuf, sess_timeout, sess); - ogs_expect_or_return(s5c_xact); + if (!s5c_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s5c_xact->local_teid = sess->sgw_s5c_teid; s5c_xact->modify_action = OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST; @@ -414,12 +420,18 @@ void sgwc_sxa_handle_session_establishment_response( } pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } ogs_assert(sess->gnode); s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &recv_message->h, pkbuf, sess_timeout, sess); - ogs_expect_or_return(s5c_xact); + if (!s5c_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s5c_xact->local_teid = sess->sgw_s5c_teid; } @@ -685,10 +697,16 @@ void sgwc_sxa_handle_session_modification_response( send_message.h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(&send_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -705,10 +723,16 @@ void sgwc_sxa_handle_session_modification_response( recv_message->h.teid = sess->pgw_s5c_teid; pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s5c_xact, &recv_message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); @@ -748,13 +772,19 @@ void sgwc_sxa_handle_session_modification_response( recv_message->h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } ogs_assert(sgwc_ue->gnode); ogs_assert(bearer); s11_xact = ogs_gtp_xact_local_create(sgwc_ue->gnode, &recv_message->h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return(s11_xact); + if (!s11_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s11_xact->local_teid = sgwc_ue->sgw_s11_teid; ogs_gtp_xact_associate(s5c_xact, s11_xact); @@ -809,10 +839,16 @@ void sgwc_sxa_handle_session_modification_response( recv_message->h.teid = sess->pgw_s5c_teid; pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s5c_xact, &recv_message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s5c_xact); ogs_expect(rv == OGS_OK); @@ -929,10 +965,16 @@ void sgwc_sxa_handle_session_modification_response( send_message.h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(&send_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -1007,10 +1049,16 @@ void sgwc_sxa_handle_session_modification_response( recv_message->h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s11_xact, &recv_message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -1038,13 +1086,19 @@ void sgwc_sxa_handle_session_modification_response( recv_message->h.teid = sess->pgw_s5c_teid; pkbuf = ogs_gtp2_build_msg(recv_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } ogs_assert(sess->gnode); s5c_xact = ogs_gtp_xact_local_create( sess->gnode, &recv_message->h, pkbuf, sess_timeout, sess); - ogs_expect_or_return(s5c_xact); + if (!s5c_xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } s5c_xact->local_teid = sess->sgw_s5c_teid; ogs_gtp_xact_associate(s11_xact, s5c_xact); @@ -1117,11 +1171,17 @@ void sgwc_sxa_handle_session_modification_response( send_message.h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(&send_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx( s11_xact, &send_message.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -1176,10 +1236,16 @@ void sgwc_sxa_handle_session_modification_response( send_message.h.teid = sgwc_ue->mme_s11_teid; pkbuf = ogs_gtp2_build_msg(&send_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(s11_xact); ogs_expect(rv == OGS_OK); @@ -1298,10 +1364,16 @@ void sgwc_sxa_handle_session_deletion_response( gtp_message->h.teid = teid; pkbuf = ogs_gtp2_build_msg(gtp_message); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("ogs_gtp2_build_msg() failed"); + return; + } rv = ogs_gtp_xact_update_tx(gtp_xact, >p_message->h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } rv = ogs_gtp_xact_commit(gtp_xact); ogs_expect(rv == OGS_OK); diff --git a/src/sgwu/pfcp-path.c b/src/sgwu/pfcp-path.c index fe825ed92..8d60c8a83 100644 --- a/src/sgwu/pfcp-path.c +++ b/src/sgwu/pfcp-path.c @@ -176,10 +176,16 @@ int sgwu_pfcp_send_session_establishment_response( sxabuf = sgwu_sxa_build_session_establishment_response( h.type, sess, created_pdr, num_of_created_pdr); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwu_sxa_build_session_establishment_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -204,10 +210,16 @@ int sgwu_pfcp_send_session_modification_response( sxabuf = sgwu_sxa_build_session_modification_response( h.type, sess, created_pdr, num_of_created_pdr); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwu_sxa_build_session_modification_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -229,10 +241,16 @@ int sgwu_pfcp_send_session_deletion_response(ogs_pfcp_xact_t *xact, h.seid = sess->sgwc_sxa_f_seid.seid; sxabuf = sgwu_sxa_build_session_deletion_response(h.type, sess); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("sgwu_sxa_build_session_deletion_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -273,13 +291,22 @@ int sgwu_pfcp_send_session_report_request( h.seid = sess->sgwc_sxa_f_seid.seid; xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } sxabuf = ogs_pfcp_build_session_report_request(h.type, report); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("ogs_pfcp_build_session_report_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/src/sgwu/sxa-build.c b/src/sgwu/sxa-build.c index 964415026..777ea987c 100644 --- a/src/sgwu/sxa-build.c +++ b/src/sgwu/sxa-build.c @@ -42,7 +42,10 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } rsp->node_id.presence = 1; rsp->node_id.data = &node_id; rsp->node_id.len = len; @@ -55,7 +58,10 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, rv = ogs_pfcp_sockaddr_to_f_seid( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, &f_seid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + return NULL; + } f_seid.seid = htobe64(sess->sgwu_sxa_seid); rsp->up_f_seid.presence = 1; rsp->up_f_seid.data = &f_seid; diff --git a/src/smf/binding.c b/src/smf/binding.c index 9b3260b7d..7a27fb52d 100644 --- a/src/smf/binding.c +++ b/src/smf/binding.c @@ -262,8 +262,14 @@ void smf_bearer_binding(smf_sess_t *sess) smf_pf_t *pf = NULL; ogs_flow_t *flow = &pcc_rule->flow[j]; - ogs_expect_or_return(flow); - ogs_expect_or_return(flow->description); + if (!flow) { + ogs_error("No Flow"); + return; + } + if (!flow->description) { + ogs_error("No Flow-Description"); + return; + } /* * To add a flow to an existing tft. @@ -364,11 +370,17 @@ void smf_bearer_binding(smf_sess_t *sess) OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED, (ogs_list_count(&bearer->pf_to_add_list) > 0) ? &tft : NULL, qos_presence); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("smf_s5c_build_update_bearer_request() failed"); + return; + } xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, gtp_bearer_timeout, bearer); - ogs_expect_or_return(xact); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return; + } xact->local_teid = sess->smf_n4_teid; if (ogs_list_count(&bearer->pf_to_add_list) > 0) @@ -434,11 +446,17 @@ int smf_gtp2_send_create_bearer_request(smf_bearer_t *bearer) &tft, bearer, OGS_GTP2_TFT_CODE_CREATE_NEW_TFT); pkbuf = smf_s5c_build_create_bearer_request(h.type, bearer, &tft); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_s5c_build_create_bearer_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, gtp_bearer_timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->local_teid = sess->smf_n4_teid; rv = ogs_gtp_xact_commit(xact); @@ -573,8 +591,14 @@ void smf_qos_flow_binding(smf_sess_t *sess) for (j = 0; j < pcc_rule->num_of_flow; j++) { ogs_flow_t *flow = &pcc_rule->flow[j]; - ogs_expect_or_return(flow); - ogs_expect_or_return(flow->description); + if (!flow) { + ogs_error("No Flow"); + return; + } + if (!flow->description) { + ogs_error("No Flow-Description"); + return; + } /* * To add a flow to an existing tft. diff --git a/src/smf/context.c b/src/smf/context.c index 7ebc3d0b0..f01935bc3 100644 --- a/src/smf/context.c +++ b/src/smf/context.c @@ -966,7 +966,10 @@ smf_gtp_node_t *smf_gtp_node_new(ogs_gtp_node_t *gnode) char addr[OGS_ADDRSTRLEN]; ogs_pool_alloc(&smf_gtp_node_pool, &smf_gnode); - ogs_expect_or_return_val(smf_gnode, NULL); + if (!smf_gnode) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } memset(smf_gnode, 0, sizeof(smf_gtp_node_t)); addr[0] = '\0'; diff --git a/src/smf/gn-build.c b/src/smf/gn-build.c index 1ef0c9e6a..02bd52482 100644 --- a/src/smf/gn-build.c +++ b/src/smf/gn-build.c @@ -198,26 +198,41 @@ ogs_pkbuf_t *smf_gn_build_create_pdp_context_response( if (sess->sgw_s5c_ip.ipv4) { rv = ogs_gtp1_sockaddr_to_gsn_addr(ogs_gtp_self()->gtpc_addr, NULL, &smf_gnc_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, ogs_gtp_self()->gtpc_addr6, &smf_gnc_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } else { rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, ogs_gtp_self()->gtpc_addr6, &smf_gnc_gsnaddr, &gsn_len); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(ogs_gtp_self()->gtpc_addr, NULL, &smf_gnc_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->alternative_ggsn_address_for_control_plane.presence = 1; rsp->alternative_ggsn_address_for_control_plane.data = &smf_gnc_altgsnaddr; rsp->alternative_ggsn_address_for_control_plane.len = gsn_altlen; - ogs_expect_or_return_val(rv == OGS_OK, NULL); } else { rv = ogs_gtp1_sockaddr_to_gsn_addr( ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6, &smf_gnc_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->ggsn_address_for_control_plane.presence = 1; rsp->ggsn_address_for_control_plane.data = &smf_gnc_gsnaddr; @@ -229,16 +244,29 @@ ogs_pkbuf_t *smf_gn_build_create_pdp_context_response( if (bearer->sgw_s5u_ip.ipv4) { rv = ogs_gtp1_sockaddr_to_gsn_addr(bearer->pgw_s5u_addr, NULL, &pgw_gnu_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, bearer->pgw_s5u_addr6, &pgw_gnu_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } else { rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, bearer->pgw_s5u_addr6, &pgw_gnu_gsnaddr, &gsn_len); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(bearer->pgw_s5u_addr, NULL, &pgw_gnu_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->alternative_ggsn_address_for_user_traffic.presence = 1; rsp->alternative_ggsn_address_for_user_traffic.data = &pgw_gnu_altgsnaddr; @@ -247,7 +275,10 @@ ogs_pkbuf_t *smf_gn_build_create_pdp_context_response( rv = ogs_gtp1_sockaddr_to_gsn_addr( bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_gnu_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->ggsn_address_for_user_traffic.presence = 1; rsp->ggsn_address_for_user_traffic.data = &pgw_gnu_gsnaddr; @@ -398,26 +429,41 @@ ogs_pkbuf_t *smf_gn_build_update_pdp_context_response( if (sess->sgw_s5c_ip.ipv4) { rv = ogs_gtp1_sockaddr_to_gsn_addr(ogs_gtp_self()->gtpc_addr, NULL, &smf_gnc_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, ogs_gtp_self()->gtpc_addr6, &smf_gnc_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } else { rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, ogs_gtp_self()->gtpc_addr6, &smf_gnc_gsnaddr, &gsn_len); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(ogs_gtp_self()->gtpc_addr, NULL, &smf_gnc_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->alternative_ggsn_address_for_control_plane.presence = 1; rsp->alternative_ggsn_address_for_control_plane.data = &smf_gnc_altgsnaddr; rsp->alternative_ggsn_address_for_control_plane.len = gsn_altlen; - ogs_expect_or_return_val(rv == OGS_OK, NULL); } else { rv = ogs_gtp1_sockaddr_to_gsn_addr( ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6, &smf_gnc_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->ggsn_address_for_control_plane.presence = 1; rsp->ggsn_address_for_control_plane.data = &smf_gnc_gsnaddr; @@ -429,16 +475,29 @@ ogs_pkbuf_t *smf_gn_build_update_pdp_context_response( if (bearer->sgw_s5u_ip.ipv4) { rv = ogs_gtp1_sockaddr_to_gsn_addr(bearer->pgw_s5u_addr, NULL, &pgw_gnu_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, bearer->pgw_s5u_addr6, &pgw_gnu_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } else { rv = ogs_gtp1_sockaddr_to_gsn_addr(NULL, bearer->pgw_s5u_addr6, &pgw_gnu_gsnaddr, &gsn_len); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } rv = ogs_gtp1_sockaddr_to_gsn_addr(bearer->pgw_s5u_addr, NULL, &pgw_gnu_altgsnaddr, &gsn_altlen); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->alternative_ggsn_address_for_user_traffic.presence = 1; rsp->alternative_ggsn_address_for_user_traffic.data = &pgw_gnu_altgsnaddr; @@ -447,7 +506,10 @@ ogs_pkbuf_t *smf_gn_build_update_pdp_context_response( rv = ogs_gtp1_sockaddr_to_gsn_addr( bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_gnu_gsnaddr, &gsn_len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_sockaddr_to_gsn_addr() failed"); + return NULL; + } } rsp->ggsn_address_for_user_traffic.presence = 1; rsp->ggsn_address_for_user_traffic.data = &pgw_gnu_gsnaddr; diff --git a/src/smf/gsm-build.c b/src/smf/gsm-build.c index 2575b9daf..2311c9223 100644 --- a/src/smf/gsm-build.c +++ b/src/smf/gsm-build.c @@ -132,8 +132,14 @@ ogs_pkbuf_t *gsm_build_pdu_session_establishment_accept(smf_sess_t *sess) qos_rule[0].flow.identifier = qos_flow->qfi; rv = ogs_nas_build_qos_rules(authorized_qos_rules, qos_rule, 1); - ogs_expect_or_return_val(rv == OGS_OK, NULL); - ogs_expect_or_return_val(authorized_qos_rules->length, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_nas_build_qos_rules() failed"); + return NULL; + } + if (!authorized_qos_rules->length) { + ogs_error("No length"); + return NULL; + } /* Session-AMBR */ session_ambr->length = 6; @@ -203,8 +209,14 @@ ogs_pkbuf_t *gsm_build_pdu_session_establishment_accept(smf_sess_t *sess) OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_AUTHORIZED_QOS_FLOW_DESCRIPTIONS_PRESENT; rv = ogs_nas_build_qos_flow_descriptions( authorized_qos_flow_descriptions, qos_flow_description, 1); - ogs_expect_or_return_val(rv == OGS_OK, NULL); - ogs_expect_or_return_val(authorized_qos_flow_descriptions->length, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_nas_build_qos_flow_descriptions() failed"); + return NULL; + } + if (!authorized_qos_flow_descriptions->length) { + ogs_error("No length"); + return NULL; + } /* Extended protocol configuration options */ if (sess->nas.ue_pco.buffer && sess->nas.ue_pco.length) { @@ -363,8 +375,14 @@ ogs_pkbuf_t *gsm_build_pdu_session_modification_command( } rv = ogs_nas_build_qos_rules(authorized_qos_rules, qos_rule, i); - ogs_expect_or_return_val(rv == OGS_OK, NULL); - ogs_expect_or_return_val(authorized_qos_rules->length, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_nas_build_qos_rules() failed"); + return NULL; + } + if (!authorized_qos_rules->length) { + ogs_error("No length"); + return NULL; + } pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_AUTHORIZED_QOS_RULES_PRESENT; @@ -447,9 +465,14 @@ ogs_pkbuf_t *gsm_build_pdu_session_modification_command( rv = ogs_nas_build_qos_flow_descriptions( authorized_qos_flow_descriptions, qos_flow_description, i); - ogs_expect_or_return_val(rv == OGS_OK, NULL); - ogs_expect_or_return_val( - authorized_qos_flow_descriptions->length, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_nas_build_qos_flow_descriptions() failed"); + return NULL; + } + if (!authorized_qos_flow_descriptions->length) { + ogs_error("No length"); + return NULL; + } pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_AUTHORIZED_QOS_FLOW_DESCRIPTIONS_PRESENT; diff --git a/src/smf/gtp-path.c b/src/smf/gtp-path.c index 5b34f0ab0..5f242284a 100644 --- a/src/smf/gtp-path.c +++ b/src/smf/gtp-path.c @@ -331,10 +331,16 @@ int smf_gtp1_send_create_pdp_context_response( h.teid = sess->sgw_s5c_teid; pkbuf = smf_gn_build_create_pdp_context_response(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_gn_build_create_pdp_context_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp1_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -357,10 +363,16 @@ int smf_gtp1_send_delete_pdp_context_response( h.teid = sess->sgw_s5c_teid; pkbuf = smf_gn_build_delete_pdp_context_response(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_gn_build_delete_pdp_context_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp1_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -390,11 +402,17 @@ int smf_gtp1_send_update_pdp_context_request( pkbuf = smf_gn_build_update_pdp_context_request( h.type, bearer, pti, cause_value); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_gn_build_update_pdp_context_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp1_xact_local_create( sess->gnode, &h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp1_xact_local_create() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -424,10 +442,16 @@ int smf_gtp1_send_update_pdp_context_response( pkbuf = smf_gn_build_update_pdp_context_response( h.type, sess, bearer); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_gn_build_update_pdp_context_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp1_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp1_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -450,10 +474,16 @@ int smf_gtp2_send_create_session_response( h.teid = sess->sgw_s5c_teid; pkbuf = smf_s5c_build_create_session_response(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_s5c_build_create_session_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -479,10 +509,16 @@ int smf_gtp2_send_modify_bearer_response( pkbuf = smf_s5c_build_modify_bearer_response( h.type, sess, req, sgw_relocation); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_s5c_build_modify_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -505,10 +541,16 @@ int smf_gtp2_send_delete_session_response( h.teid = sess->sgw_s5c_teid; pkbuf = smf_s5c_build_delete_session_response(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_s5c_build_delete_session_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -537,11 +579,17 @@ int smf_gtp2_send_delete_bearer_request( pkbuf = smf_s5c_build_delete_bearer_request( h.type, bearer, pti, cause_value); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("smf_s5c_build_delete_bearer_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create( sess->gnode, &h, pkbuf, bearer_timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } xact->local_teid = sess->smf_n4_teid; rv = ogs_gtp_xact_commit(xact); @@ -603,7 +651,10 @@ static void send_router_advertisement(smf_sess_t *sess, uint8_t *ip6_dst) if (ogs_gtp_self()->link_local_addr) { OGS_ADDR(ogs_gtp_self()->link_local_addr, ipstr); rv = ogs_ipsubnet(&src_ipsub, ipstr, NULL); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_ipsubnet() failed"); + return; + } } else { /* For the case of loopback used for GTPU link-local address is not * available, hence set the source IP to fe80::1 diff --git a/src/smf/gx-path.c b/src/smf/gx-path.c index 0a2da8329..8eaa9aa87 100644 --- a/src/smf/gx-path.c +++ b/src/smf/gx-path.c @@ -51,12 +51,22 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->gx_sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->gx_sid, NULL); + if (!new->gx_sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } + + ogs_thread_mutex_unlock(&sess_state_mutex); return new; } diff --git a/src/smf/gy-path.c b/src/smf/gy-path.c index 325806928..f0f089fc1 100644 --- a/src/smf/gy-path.c +++ b/src/smf/gy-path.c @@ -54,12 +54,22 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->gy_sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->gy_sid, NULL); + if (!new->gy_sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } + + ogs_thread_mutex_unlock(&sess_state_mutex); return new; } diff --git a/src/smf/n4-build.c b/src/smf/n4-build.c index 0b21772f4..d84bfbfcb 100644 --- a/src/smf/n4-build.c +++ b/src/smf/n4-build.c @@ -55,7 +55,10 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, ogs_app()->parameter.prefer_ipv4, &node_id, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + return NULL; + } req->node_id.presence = 1; req->node_id.data = &node_id; req->node_id.len = len; @@ -64,7 +67,10 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( rv = ogs_pfcp_sockaddr_to_f_seid( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, &f_seid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + return NULL; + } f_seid.seid = htobe64(sess->smf_n4_seid); req->cp_f_seid.presence = 1; req->cp_f_seid.data = &f_seid; diff --git a/src/smf/n4-handler.c b/src/smf/n4-handler.c index 14687db98..ef3e2b553 100644 --- a/src/smf/n4-handler.c +++ b/src/smf/n4-handler.c @@ -981,10 +981,16 @@ void smf_epc_n4_handle_session_modification_response( pkbuf = smf_s5c_build_delete_bearer_request( h.type, bearer, gtp_pti, gtp_cause); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("smf_s5c_build_delete_bearer_request() failed"); + return; + } rv = ogs_gtp_xact_update_tx(gtp_xact, &h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } /* IMPORTANT: * diff --git a/src/smf/pfcp-path.c b/src/smf/pfcp-path.c index b77ffbe22..80ec3cf42 100644 --- a/src/smf/pfcp-path.c +++ b/src/smf/pfcp-path.c @@ -334,10 +334,16 @@ int smf_pfcp_send_modify_list( h.seid = sess->upf_n4_seid; n4buf = (*modify_list)(h.type, sess, xact); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("modify_list() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } if (duration) { ogs_pfcp_xact_delayed_commit(xact, duration); @@ -363,7 +369,10 @@ int smf_5gc_pfcp_send_session_establishment_request( ogs_assert(stream); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_5gc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_stream = stream; xact->local_seid = sess->smf_n4_seid; @@ -373,10 +382,16 @@ int smf_5gc_pfcp_send_session_establishment_request( h.seid = sess->upf_n4_seid; n4buf = smf_n4_build_session_establishment_request(h.type, sess); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("smf_n4_build_session_establishment_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -397,7 +412,10 @@ int smf_5gc_pfcp_send_all_pdr_modification_request( ogs_assert(stream); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_5gc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_stream = stream; xact->local_seid = sess->smf_n4_seid; @@ -424,7 +442,10 @@ int smf_5gc_pfcp_send_qos_flow_list_modification_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_5gc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_stream = stream; xact->local_seid = sess->smf_n4_seid; @@ -449,7 +470,10 @@ int smf_5gc_pfcp_send_session_deletion_request( ogs_assert(trigger); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_5gc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->assoc_stream = stream; xact->delete_trigger = trigger; @@ -460,10 +484,16 @@ int smf_5gc_pfcp_send_session_deletion_request( h.seid = sess->upf_n4_seid; n4buf = smf_n4_build_session_deletion_request(h.type, sess); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("smf_n4_build_session_deletion_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -482,7 +512,10 @@ int smf_epc_pfcp_send_session_establishment_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_epc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; @@ -493,10 +526,16 @@ int smf_epc_pfcp_send_session_establishment_request( h.seid = sess->upf_n4_seid; n4buf = smf_n4_build_session_establishment_request(h.type, sess); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("smf_n4_build_session_establishment_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -515,7 +554,10 @@ int smf_epc_pfcp_send_all_pdr_modification_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_epc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; @@ -526,7 +568,10 @@ int smf_epc_pfcp_send_all_pdr_modification_request( xact->gtp_cause = gtp_cause; if (gtpbuf) { xact->gtpbuf = ogs_pkbuf_copy(gtpbuf); - ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR); + if (!xact->gtpbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + return OGS_ERROR; + } } ogs_list_init(&sess->pdr_to_modify_list); @@ -554,7 +599,10 @@ int smf_epc_pfcp_send_one_bearer_modification_request( xact = ogs_pfcp_xact_local_create( sess->pfcp_node, bearer_epc_timeout, bearer); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->epc = true; /* EPC PFCP transaction */ xact->assoc_xact = gtp_xact; @@ -585,7 +633,10 @@ int smf_epc_pfcp_send_session_deletion_request( ogs_assert(sess); xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_epc_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } xact->epc = true; /* EPC PFCP transaction */ @@ -618,10 +669,16 @@ int smf_epc_pfcp_send_session_deletion_request( h.seid = sess->upf_n4_seid; n4buf = smf_n4_build_session_deletion_request(h.type, sess); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("smf_n4_build_session_deletion_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -644,9 +701,14 @@ int smf_epc_pfcp_send_deactivation(smf_sess_t *sess, uint8_t gtp_cause) /* Handover from Non-3GPP to 3GPP */ wlan_sess = smf_sess_find_by_apn( smf_ue, sess->session.name, OGS_GTP2_RAT_TYPE_WLAN); - ogs_expect_or_return_val(wlan_sess, OGS_ERROR); - ogs_expect_or_return_val( - ogs_list_first(&wlan_sess->bearer_list), OGS_ERROR); + if (!wlan_sess) { + ogs_error("smf_sess_find_by_apn() failed"); + return OGS_ERROR; + } + if (ogs_list_first(&wlan_sess->bearer_list) == NULL) { + ogs_error("No Bearer List in WLAN Session"); + return OGS_ERROR; + } /* Deactivate WLAN Session */ rv = smf_epc_pfcp_send_all_pdr_modification_request( @@ -654,7 +716,11 @@ int smf_epc_pfcp_send_deactivation(smf_sess_t *sess, uint8_t gtp_cause) OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE, OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED, OGS_GTP2_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("smf_epc_pfcp_send_all_pdr_modification_requestO() " + "failed"); + return OGS_ERROR; + } break; case OGS_GTP2_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP: @@ -662,8 +728,10 @@ int smf_epc_pfcp_send_deactivation(smf_sess_t *sess, uint8_t gtp_cause) eutran_sess = smf_sess_find_by_apn( smf_ue, sess->session.name, OGS_GTP2_RAT_TYPE_EUTRAN); if (eutran_sess) { - ogs_expect_or_return_val( - ogs_list_first(&eutran_sess->bearer_list), OGS_ERROR); + if (ogs_list_first(&eutran_sess->bearer_list) == NULL) { + ogs_error("No Bearer List in E-URAN Session"); + return OGS_ERROR; + } /* Deactivate EUTRAN Session */ rv = smf_epc_pfcp_send_all_pdr_modification_request( @@ -671,7 +739,11 @@ int smf_epc_pfcp_send_deactivation(smf_sess_t *sess, uint8_t gtp_cause) OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE, OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED, OGS_GTP2_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP); - ogs_expect_or_return_val(rv == OGS_OK, rv); + if (rv != OGS_OK) { + ogs_error("smf_epc_pfcp_send_all_pdr_modification_request() " + "failed"); + return OGS_ERROR; + } } break; @@ -695,10 +767,16 @@ int smf_pfcp_send_session_report_response( h.seid = sess->upf_n4_seid; sxabuf = ogs_pfcp_build_session_report_response(h.type, cause); - ogs_expect_or_return_val(sxabuf, OGS_ERROR); + if (!sxabuf) { + ogs_error("ogs_pfcp_build_session_report_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, sxabuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/src/smf/s5c-build.c b/src/smf/s5c-build.c index deb035d7f..02041f327 100644 --- a/src/smf/s5c-build.c +++ b/src/smf/s5c-build.c @@ -83,7 +83,10 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response( rv = ogs_gtp2_sockaddr_to_f_teid( ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6, &smf_s5c_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_sockaddr_to_f_teid() failed"); + return NULL; + } rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface. presence = 1; rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface. @@ -185,7 +188,10 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response( rv = ogs_gtp2_sockaddr_to_f_teid( bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_s5u_teid[i], &pgw_s5u_len[i]); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_sockaddr_to_f_teid() failed"); + return NULL; + } switch (sess->gtp_rat_type) { case OGS_GTP2_RAT_TYPE_EUTRAN: @@ -374,7 +380,10 @@ ogs_pkbuf_t *smf_s5c_build_create_bearer_request( ogs_assert(bearer->pgw_s5u_addr || bearer->pgw_s5u_addr6); rv = ogs_gtp2_sockaddr_to_f_teid( bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_s5u_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_sockaddr_to_f_teid() failed"); + return NULL; + } req->bearer_contexts.s4_u_sgsn_f_teid.presence = 1; req->bearer_contexts.s4_u_sgsn_f_teid.data = &pgw_s5u_teid; req->bearer_contexts.s4_u_sgsn_f_teid.len = len; diff --git a/src/smf/s5c-handler.c b/src/smf/s5c-handler.c index c7c7acb75..555c1b303 100644 --- a/src/smf/s5c-handler.c +++ b/src/smf/s5c-handler.c @@ -739,7 +739,10 @@ void smf_s5c_handle_create_bearer_response( /* Find the Bearer by PGW-S5U-TEID */ ogs_assert(pgw_s5u_teid); bearer = smf_bearer_find_by_pgw_s5u_teid(sess, be32toh(pgw_s5u_teid->teid)); - ogs_expect_or_return(bearer); + if (!bearer) { + ogs_error("smf_bearer_find_by_pgw_s5u_teid() failed"); + return; + } /* Set EBI */ bearer->ebi = rsp->bearer_contexts.eps_bearer_id.u8; @@ -1380,10 +1383,16 @@ void smf_s5c_handle_bearer_resource_command( pkbuf = smf_s5c_build_update_bearer_request( h.type, bearer, cmd->procedure_transaction_id.u8, tft_update ? &tft : NULL, qos_update); - ogs_expect_or_return(pkbuf); + if (!pkbuf) { + ogs_error("smf_s5c_build_update_bearer_request() failed"); + return; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return; + } if (tft_update) xact->update_flags |= OGS_GTP_MODIFY_TFT_UPDATE; diff --git a/src/smf/s6b-path.c b/src/smf/s6b-path.c index 57a65abbc..2d5a98cdc 100644 --- a/src/smf/s6b-path.c +++ b/src/smf/s6b-path.c @@ -43,11 +43,21 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); - ogs_thread_mutex_unlock(&sess_state_mutex); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } new->s6b_sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->s6b_sid, NULL); + if (!new->s6b_sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } + + ogs_thread_mutex_unlock(&sess_state_mutex); return new; } diff --git a/src/upf/pfcp-path.c b/src/upf/pfcp-path.c index f4b74efc1..9224956cc 100644 --- a/src/upf/pfcp-path.c +++ b/src/upf/pfcp-path.c @@ -179,10 +179,16 @@ int upf_pfcp_send_session_establishment_response( n4buf = upf_n4_build_session_establishment_response( h.type, sess, created_pdr, num_of_created_pdr); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("upf_n4_build_session_establishment_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -207,10 +213,16 @@ int upf_pfcp_send_session_modification_response( n4buf = upf_n4_build_session_modification_response( h.type, sess, created_pdr, num_of_created_pdr); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("upf_n4_build_session_modification_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -232,10 +244,16 @@ int upf_pfcp_send_session_deletion_response(ogs_pfcp_xact_t *xact, h.seid = sess->smf_n4_f_seid.seid; n4buf = upf_n4_build_session_deletion_response(h.type, sess); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("upf_n4_build_session_deletion_response() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -278,13 +296,23 @@ int upf_pfcp_send_session_report_request( h.seid = sess->smf_n4_f_seid.seid; xact = ogs_pfcp_xact_local_create(sess->pfcp_node, sess_timeout, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_pfcp_xact_local_create() failed"); + return OGS_ERROR; + } n4buf = ogs_pfcp_build_session_report_request(h.type, report); - ogs_expect_or_return_val(n4buf, OGS_ERROR); + if (!n4buf) { + ogs_error("ogs_pfcp_build_session_report_request() failed"); + return OGS_ERROR; + } rv = ogs_pfcp_xact_update_tx(xact, &h, n4buf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_pfcp_xact_update_tx() failed"); + return OGS_ERROR; + } + rv = ogs_pfcp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/tests/af/context.c b/tests/af/context.c index f4e0bdead..473bd201e 100644 --- a/tests/af/context.c +++ b/tests/af/context.c @@ -135,7 +135,7 @@ af_sess_t *af_sess_add_by_ue_address(ogs_ip_t *ue_address) ogs_assert(ue_address->ipv4 || ue_address->ipv6); ogs_pool_alloc(&af_sess_pool, &sess); - ogs_expect_or_return_val(sess, NULL); + ogs_assert(sess); memset(sess, 0, sizeof *sess); sess->af_app_session_id = ogs_msprintf("%d", @@ -144,15 +144,15 @@ af_sess_t *af_sess_add_by_ue_address(ogs_ip_t *ue_address) if (ue_address->ipv4) { sess->ipv4addr = ogs_ipv4_to_string(ue_address->addr); - ogs_expect_or_return_val(sess->ipv4addr, NULL); + ogs_assert(sess->ipv4addr); } if (ue_address->ipv6) { sess->ipv6addr = ogs_ipv6addr_to_string(ue_address->addr6); - ogs_expect_or_return_val(sess->ipv6addr, NULL); + ogs_assert(sess->ipv6addr); sess->ipv6prefix = ogs_ipv6prefix_to_string( ue_address->addr6, OGS_IPV6_128_PREFIX_LEN); - ogs_expect_or_return_val(sess->ipv6prefix, NULL); + ogs_assert(sess->ipv6prefix); } OGS_SBI_FEATURES_SET(sess->policyauthorization_features, @@ -240,7 +240,7 @@ bool af_sess_set_pcf_app_session_id(af_sess_t *sess, char *pcf_app_session_id) clear_pcf_app_session_id(sess); sess->pcf_app_session_id = ogs_strdup(pcf_app_session_id); - ogs_expect_or_return_val(sess->pcf_app_session_id, false); + ogs_assert(sess->pcf_app_session_id); ogs_hash_set(self.pcf_app_session_id_hash, &sess->pcf_app_session_id, strlen(sess->pcf_app_session_id), sess); diff --git a/tests/af/npcf-build.c b/tests/af/npcf-build.c index 82777f8c5..a5b9d43fc 100644 --- a/tests/af/npcf-build.c +++ b/tests/af/npcf-build.c @@ -76,7 +76,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( memset(&AscReqData, 0, sizeof(AscReqData)); server = ogs_list_first(&ogs_sbi_self()->server_list); - ogs_expect_or_return_val(server, NULL); + ogs_assert(server); memset(&header, 0, sizeof(header)); header.service.name = (char *)OGS_SBI_SERVICE_NAME_NPCF_POLICYAUTHORIZATION; @@ -84,7 +84,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( header.resource.component[0] = (char *)OGS_SBI_RESOURCE_NAME_APP_SESSIONS; header.resource.component[1] = (char *)sess->af_app_session_id; AscReqData.notif_uri = ogs_sbi_server_uri(server, &header); - ogs_expect_or_return_val(AscReqData.notif_uri, NULL); + ogs_assert(AscReqData.notif_uri); AscReqData.supp_feat = ogs_uint64_to_string(sess->policyauthorization_features); @@ -101,12 +101,12 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( ogs_assert(EventList); Event = ogs_calloc(1, sizeof(*Event)); - ogs_expect_or_return_val(Event, NULL); + ogs_assert(Event); Event->event = OpenAPI_af_event_CHARGING_CORRELATION; OpenAPI_list_add(EventList, Event); Event = ogs_calloc(1, sizeof(*Event)); - ogs_expect_or_return_val(Event, NULL); + ogs_assert(Event); Event->event = OpenAPI_af_event_ANI_REPORT; Event->notif_method = OpenAPI_af_notif_method_ONE_TIME; OpenAPI_list_add(EventList, Event); @@ -133,7 +133,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( ogs_assert(MediaComponentList); MediaComponent = ogs_calloc(1, sizeof(*MediaComponent)); - ogs_expect_or_return_val(MediaComponent, NULL); + ogs_assert(MediaComponent); MediaComponent->med_comp_n = (i++); MediaComponent->f_status = OpenAPI_flow_status_ENABLED; @@ -188,7 +188,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( /* Sub Component #1 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; @@ -230,7 +230,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create( /* Sub Component #2 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_RTCP; @@ -411,7 +411,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_update( ogs_assert(MediaComponentList); MediaComponent = ogs_calloc(1, sizeof(*MediaComponent)); - ogs_expect_or_return_val(MediaComponent, NULL); + ogs_assert(MediaComponent); MediaComponent->med_comp_n = (i++); MediaComponent->f_status = OpenAPI_flow_status_ENABLED; @@ -466,7 +466,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_update( /* Sub Component #1 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; @@ -503,7 +503,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_update( /* Sub Component #2 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_RTCP; @@ -679,7 +679,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( memset(&AscReqData, 0, sizeof(AscReqData)); server = ogs_list_first(&ogs_sbi_self()->server_list); - ogs_expect_or_return_val(server, NULL); + ogs_assert(server); memset(&header, 0, sizeof(header)); header.service.name = (char *)OGS_SBI_SERVICE_NAME_NPCF_POLICYAUTHORIZATION; @@ -687,7 +687,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( header.resource.component[0] = (char *)OGS_SBI_RESOURCE_NAME_APP_SESSIONS; header.resource.component[1] = (char *)sess->af_app_session_id; AscReqData.notif_uri = ogs_sbi_server_uri(server, &header); - ogs_expect_or_return_val(AscReqData.notif_uri, NULL); + ogs_assert(AscReqData.notif_uri); AscReqData.supp_feat = ogs_uint64_to_string(sess->policyauthorization_features); @@ -704,12 +704,12 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( ogs_assert(EventList); Event = ogs_calloc(1, sizeof(*Event)); - ogs_expect_or_return_val(Event, NULL); + ogs_assert(Event); Event->event = OpenAPI_af_event_CHARGING_CORRELATION; OpenAPI_list_add(EventList, Event); Event = ogs_calloc(1, sizeof(*Event)); - ogs_expect_or_return_val(Event, NULL); + ogs_assert(Event); Event->event = OpenAPI_af_event_ANI_REPORT; Event->notif_method = OpenAPI_af_notif_method_ONE_TIME; OpenAPI_list_add(EventList, Event); @@ -736,7 +736,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( ogs_assert(MediaComponentList); MediaComponent = ogs_calloc(1, sizeof(*MediaComponent)); - ogs_expect_or_return_val(MediaComponent, NULL); + ogs_assert(MediaComponent); MediaComponent->med_comp_n = (i++); MediaComponent->f_status = OpenAPI_flow_status_ENABLED; @@ -808,7 +808,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( /* Sub Component #1 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; @@ -834,7 +834,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( /* Sub Component #2 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; @@ -862,7 +862,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( MediaComponent->med_sub_comps = SubComponentList; MediaComponent = ogs_calloc(1, sizeof(*MediaComponent)); - ogs_expect_or_return_val(MediaComponent, NULL); + ogs_assert(MediaComponent); MediaComponent->med_comp_n = (i++); MediaComponent->f_status = OpenAPI_flow_status_ENABLED; @@ -937,7 +937,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( /* Sub Component #1 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; @@ -963,7 +963,7 @@ ogs_sbi_request_t *af_npcf_policyauthorization_build_create_video( /* Sub Component #2 */ SubComponent = ogs_calloc(1, sizeof(*SubComponent)); - ogs_expect_or_return_val(SubComponent, NULL); + ogs_assert(SubComponent); SubComponent->f_num = (j++); SubComponent->flow_usage = OpenAPI_flow_usage_NO_INFO; diff --git a/tests/non3gpp/diameter-s6b-path.c b/tests/non3gpp/diameter-s6b-path.c index 2fc025720..d680bd6aa 100644 --- a/tests/non3gpp/diameter-s6b-path.c +++ b/tests/non3gpp/diameter-s6b-path.c @@ -44,12 +44,22 @@ static __inline__ struct sess_state *new_state(os0_t sid) ogs_thread_mutex_lock(&sess_state_mutex); ogs_pool_alloc(&sess_state_pool, &new); - ogs_expect_or_return_val(new, NULL); + if (!new) { + ogs_error("ogs_pool_alloc() failed"); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } memset(new, 0, sizeof(*new)); - ogs_thread_mutex_unlock(&sess_state_mutex); new->sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->sid, NULL); + if (!new->sid) { + ogs_error("ogs_strdup() failed"); + ogs_pool_free(&sess_state_pool, new); + ogs_thread_mutex_unlock(&sess_state_mutex); + return NULL; + } + + ogs_thread_mutex_unlock(&sess_state_mutex); return new; } diff --git a/tests/non3gpp/diameter-swx-path.c b/tests/non3gpp/diameter-swx-path.c index 575cb3520..7e775288d 100644 --- a/tests/non3gpp/diameter-swx-path.c +++ b/tests/non3gpp/diameter-swx-path.c @@ -298,13 +298,28 @@ static void test_swx_maa_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_swx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } /* Value of Result Code */ ret = fd_msg_search_avp(*msg, ogs_diam_result_code, &avp); @@ -538,13 +553,28 @@ static void test_swx_saa_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_swx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } sess = sess_data->sess; ogs_assert(sess); diff --git a/tests/non3gpp/gtp-path.c b/tests/non3gpp/gtp-path.c index 63419921d..3992bd01d 100644 --- a/tests/non3gpp/gtp-path.c +++ b/tests/non3gpp/gtp-path.c @@ -138,10 +138,16 @@ int test_s2b_send_create_session_request(test_sess_t *sess, bool handover_ind) h.teid = sess->smf_s2b_c_teid; pkbuf = test_s2b_build_create_session_request(h.type, sess, handover_ind); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("test_s2b_build_create_session_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sess->gnode, &h, pkbuf, NULL, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -163,10 +169,16 @@ int test_s2b_send_delete_session_request(test_sess_t *sess) h.teid = sess->smf_s2b_c_teid; pkbuf = test_s2b_build_delete_session_request(h.type, sess); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("test_s2b_build_delete_session_request() failed"); + return OGS_ERROR; + } xact = ogs_gtp_xact_local_create(sess->gnode, &h, pkbuf, NULL, sess); - ogs_expect_or_return_val(xact, OGS_ERROR); + if (!xact) { + ogs_error("ogs_gtp_xact_local_create() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -192,10 +204,16 @@ int test_s2b_send_create_bearer_response( h.teid = sess->smf_s2b_c_teid; pkbuf = test_s2b_build_create_bearer_response(h.type, bearer); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("test_s2b_build_create_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); @@ -221,10 +239,16 @@ int test_s2b_send_delete_bearer_response( h.teid = sess->smf_s2b_c_teid; pkbuf = test_s2b_build_delete_bearer_response(h.type, bearer); - ogs_expect_or_return_val(pkbuf, OGS_ERROR); + if (!pkbuf) { + ogs_error("test_s2b_build_delete_bearer_response() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf); - ogs_expect_or_return_val(rv == OGS_OK, OGS_ERROR); + if (rv != OGS_OK) { + ogs_error("ogs_gtp_xact_update_tx() failed"); + return OGS_ERROR; + } rv = ogs_gtp_xact_commit(xact); ogs_expect(rv == OGS_OK); diff --git a/tests/non3gpp/s2b-build.c b/tests/non3gpp/s2b-build.c index 2efc37b52..bbdb46672 100644 --- a/tests/non3gpp/s2b-build.c +++ b/tests/non3gpp/s2b-build.c @@ -240,7 +240,10 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response( ogs_assert(sess->gnode->sock); rv = ogs_gtp2_sockaddr_to_f_teid( &sess->gnode->sock->local_addr, NULL, &epdg_s2b_u_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_sockaddr_to_f_teid() failed"); + return NULL; + } rsp->bearer_contexts.s2b_u_epdg_f_teid_8.presence = 1; rsp->bearer_contexts.s2b_u_epdg_f_teid_8.data = &epdg_s2b_u_teid; rsp->bearer_contexts.s2b_u_epdg_f_teid_8.len = len; @@ -250,7 +253,10 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response( smf_s2b_u_teid.interface_type = OGS_GTP2_F_TEID_S2B_U_PGW_GTP_U; smf_s2b_u_teid.teid = htobe32(bearer->sgw_s1u_teid); rv = ogs_gtp2_ip_to_f_teid(&bearer->sgw_s1u_ip, &smf_s2b_u_teid, &len); - ogs_expect_or_return_val(rv == OGS_OK, NULL); + if (rv != OGS_OK) { + ogs_error("ogs_gtp2_ip_to_f_teid() failed"); + return NULL; + } rsp->bearer_contexts.s2b_u_pgw_f_teid.presence = 1; rsp->bearer_contexts.s2b_u_pgw_f_teid.data = &smf_s2b_u_teid; rsp->bearer_contexts.s2b_u_pgw_f_teid.len = OGS_GTP2_F_TEID_IPV4_LEN; diff --git a/tests/volte/diameter-cx-path.c b/tests/volte/diameter-cx-path.c index 60a82350f..7c2c681b0 100644 --- a/tests/volte/diameter-cx-path.c +++ b/tests/volte/diameter-cx-path.c @@ -237,13 +237,28 @@ static void test_cx_uaa_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_cx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } test_ue = sess_data->test_ue; ogs_assert(test_ue); @@ -543,13 +558,28 @@ static void test_cx_maa_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_cx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } test_ue = sess_data->test_ue; ogs_assert(test_ue); @@ -811,13 +841,28 @@ static void test_cx_saa_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_cx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } test_ue = sess_data->test_ue; ogs_assert(test_ue); @@ -1040,13 +1085,28 @@ static void test_cx_lia_cb(void *data, struct msg **msg) /* Search the session, retrieve its data */ ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(new == 0); + if (ret != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } + if (new != 0) { + ogs_error("fd_msg_sess_get() failed"); + return; + } ret = fd_sess_state_retrieve(test_cx_reg, session, &sess_data); - ogs_expect_or_return(ret == 0); - ogs_expect_or_return(sess_data); - ogs_expect_or_return((void *)sess_data == data); + if (ret != 0) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if (!sess_data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } + if ((void *)sess_data != data) { + ogs_error("fd_sess_state_retrieve() failed"); + return; + } test_ue = sess_data->test_ue; ogs_assert(test_ue); diff --git a/tests/volte/diameter-rx-path.c b/tests/volte/diameter-rx-path.c index 23677f934..11200bb31 100644 --- a/tests/volte/diameter-rx-path.c +++ b/tests/volte/diameter-rx-path.c @@ -42,9 +42,9 @@ static __inline__ struct sess_state *new_state(os0_t sid) struct sess_state *new = NULL; new = ogs_calloc(1, sizeof(*new)); - ogs_expect_or_return_val(new, NULL); + ogs_assert(new); new->sid = (os0_t)ogs_strdup((char *)sid); - ogs_expect_or_return_val(new->sid, NULL); + ogs_assert(new->sid); return new; } From 11aac6a16413bfe09e8521c1c07f494e2cd6cb76 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 00:17:10 +0900 Subject: [PATCH 16/20] [CORE] Rollback ogs_pkbuf_copy() from (#2012) In the previous #2012 working, I've added ogs_pkbuf_free() for original buffer. But, this rasied double free. So, I've rollback it, --- lib/core/ogs-pkbuf.c | 2 -- src/amf/nas-path.c | 7 +++++++ src/amf/ngap-path.c | 1 + src/mme/emm-sm.c | 6 +++++- src/mme/nas-path.c | 7 +++++++ src/mme/s1ap-path.c | 1 + 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/core/ogs-pkbuf.c b/lib/core/ogs-pkbuf.c index a283ff24b..ed7048622 100644 --- a/lib/core/ogs-pkbuf.c +++ b/lib/core/ogs-pkbuf.c @@ -318,7 +318,6 @@ ogs_pkbuf_t *ogs_pkbuf_copy_debug(ogs_pkbuf_t *pkbuf, const char *file_line) newbuf = ogs_pkbuf_alloc_debug(NULL, size, file_line); if (!newbuf) { ogs_error("ogs_pkbuf_alloc() failed [size=%d]", size); - ogs_pkbuf_free(pkbuf); return NULL; } @@ -345,7 +344,6 @@ ogs_pkbuf_t *ogs_pkbuf_copy_debug(ogs_pkbuf_t *pkbuf, const char *file_line) ogs_pool_alloc(&pool->pkbuf, &newbuf); if (!newbuf) { ogs_error("ogs_pkbuf_copy() failed"); - ogs_pkbuf_free(pkbuf); ogs_thread_mutex_unlock(&pool->mutex); return NULL; } diff --git a/src/amf/nas-path.c b/src/amf/nas-path.c index b667a17d3..262834299 100644 --- a/src/amf/nas-path.c +++ b/src/amf/nas-path.c @@ -108,6 +108,7 @@ int nas_5gs_send_registration_accept(amf_ue_t *amf_ue) amf_ue->t3550.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3550.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3550.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3550.timer, @@ -373,6 +374,7 @@ int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue, amf_ue->t3522.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3522.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3522.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3522.timer, @@ -406,6 +408,7 @@ int nas_5gs_send_identity_request(amf_ue_t *amf_ue) amf_ue->t3570.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3570.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3570.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3570.timer, @@ -439,6 +442,7 @@ int nas_5gs_send_authentication_request(amf_ue_t *amf_ue) amf_ue->t3560.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3560.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3560.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3560.timer, @@ -495,6 +499,7 @@ int nas_5gs_send_security_mode_command(amf_ue_t *amf_ue) amf_ue->t3560.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3560.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3560.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3560.timer, @@ -522,6 +527,7 @@ int nas_5gs_send_configuration_update_command( amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3555.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3555.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3555.timer, @@ -542,6 +548,7 @@ int nas_5gs_send_configuration_update_command( amf_ue->t3555.pkbuf = ogs_pkbuf_copy(gmmbuf); if (!amf_ue->t3555.pkbuf) { ogs_error("ogs_pkbuf_copy(amf_ue->t3555.pkbuf) failed"); + ogs_pkbuf_free(gmmbuf); return OGS_ERROR; } ogs_timer_start(amf_ue->t3555.timer, diff --git a/src/amf/ngap-path.c b/src/amf/ngap-path.c index 5f8c3898a..873f61497 100644 --- a/src/amf/ngap-path.c +++ b/src/amf/ngap-path.c @@ -409,6 +409,7 @@ int ngap_send_paging(amf_ue_t *amf_ue) amf_ue->t3513.pkbuf = ogs_pkbuf_copy(ngapbuf); if (!amf_ue->t3513.pkbuf) { ogs_error("ogs_pkbuf_copy() failed"); + ogs_pkbuf_free(ngapbuf); return OGS_ERROR; } diff --git a/src/mme/emm-sm.c b/src/mme/emm-sm.c index b0d6dd189..570069818 100644 --- a/src/mme/emm-sm.c +++ b/src/mme/emm-sm.c @@ -1243,7 +1243,11 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) } mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); - ogs_assert(mme_ue->t3450.pkbuf); + if (!mme_ue->t3450.pkbuf) { + ogs_error("ogs_pkbuf_copy() failed"); + ogs_pkbuf_free(emmbuf); + return; + } ogs_timer_start(mme_ue->t3450.timer, mme_timer_cfg(MME_TIMER_T3450)->duration); diff --git a/src/mme/nas-path.c b/src/mme/nas-path.c index b26fbea85..275917ea7 100644 --- a/src/mme/nas-path.c +++ b/src/mme/nas-path.c @@ -139,6 +139,7 @@ int nas_eps_send_attach_accept(mme_ue_t *mme_ue) mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3450.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3450.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3450.timer, @@ -215,6 +216,7 @@ int nas_eps_send_identity_request(mme_ue_t *mme_ue) mme_ue->t3470.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3470.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3470.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3470.timer, @@ -248,6 +250,7 @@ int nas_eps_send_authentication_request(mme_ue_t *mme_ue) mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3460.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3460.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3460.timer, @@ -281,6 +284,7 @@ int nas_eps_send_security_mode_command(mme_ue_t *mme_ue) mme_ue->t3460.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3460.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3460.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3460.timer, @@ -333,6 +337,7 @@ int nas_eps_send_detach_request(mme_ue_t *mme_ue) mme_ue->t3422.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3422.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3422.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3422.timer, @@ -446,6 +451,7 @@ int nas_eps_send_esm_information_request(mme_bearer_t *bearer) bearer->t3489.pkbuf = ogs_pkbuf_copy(esmbuf); if (!bearer->t3489.pkbuf) { ogs_error("ogs_pkbuf_copy(bearer->t3489) failed"); + ogs_pkbuf_free(esmbuf); return OGS_ERROR; } ogs_timer_start(bearer->t3489.timer, @@ -669,6 +675,7 @@ int nas_eps_send_tau_accept( mme_ue->t3450.pkbuf = ogs_pkbuf_copy(emmbuf); if (!mme_ue->t3450.pkbuf) { ogs_error("ogs_pkbuf_copy(mme_ue->t3450.pkbuf) failed"); + ogs_pkbuf_free(emmbuf); return OGS_ERROR; } ogs_timer_start(mme_ue->t3450.timer, diff --git a/src/mme/s1ap-path.c b/src/mme/s1ap-path.c index 5ed5b54da..766ca067c 100644 --- a/src/mme/s1ap-path.c +++ b/src/mme/s1ap-path.c @@ -400,6 +400,7 @@ int s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) mme_ue->t3413.pkbuf = ogs_pkbuf_copy(s1apbuf); if (!mme_ue->t3413.pkbuf) { ogs_error("ogs_pkbuf_copy() failed"); + ogs_pkbuf_free(s1apbuf); return OGS_ERROR; } From b108ae0aff11db28af2b6570724d9b597edfff87 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 19:03:00 +0900 Subject: [PATCH 17/20] [PFCP] buffer overflow in ALPINE (#1911, #2009) A buffer overflow occurred in ALPINE because the size of the pfcp message structure increased by ogs_pfcp_tlv_framed_route_t framed_route[8]; ogs_pfcp_tlv_framed_ipv6_route_t framed_ipv6_route[8]; --- lib/pfcp/build.c | 193 +++++++++++++++++++++++++++++++++---------- src/sgwc/sxa-build.c | 55 +++++++++--- src/sgwu/sxa-build.c | 57 +++++++++---- src/smf/n4-build.c | 73 ++++++++++++---- src/upf/n4-build.c | 34 +++++--- 5 files changed, 311 insertions(+), 101 deletions(-) diff --git a/lib/pfcp/build.c b/lib/pfcp/build.c index 64e9c008b..d287eecd8 100644 --- a/lib/pfcp/build.c +++ b/lib/pfcp/build.c @@ -21,50 +21,78 @@ ogs_pkbuf_t *ogs_pfcp_build_heartbeat_request(uint8_t type) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_heartbeat_request_t *req = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("Heartbeat Request"); - req = &pfcp_message.pfcp_heartbeat_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_heartbeat_request; req->recovery_time_stamp.presence = 1; req->recovery_time_stamp.u32 = ogs_pfcp_self()->pfcp_started; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_build_heartbeat_response(uint8_t type) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_heartbeat_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("Heartbeat Response"); - rsp = &pfcp_message.pfcp_heartbeat_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_heartbeat_response; rsp->recovery_time_stamp.presence = 1; rsp->recovery_time_stamp.u32 = ogs_pfcp_self()->pfcp_started; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_request(uint8_t type) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_association_setup_request_t *req = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_pfcp_node_id_t node_id; int node_id_len = 0, rv; ogs_debug("Association Setup Request"); - req = &pfcp_message.pfcp_association_setup_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_association_setup_request; rv = ogs_pfcp_sockaddr_to_node_id( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, @@ -72,6 +100,7 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_request(uint8_t type) &node_id, &node_id_len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } req->node_id.presence = 1; @@ -84,23 +113,34 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_request(uint8_t type) req->cp_function_features.presence = 1; req->cp_function_features.u8 = ogs_pfcp_self()->cp_function_features.octet5; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_response(uint8_t type, uint8_t cause) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_association_setup_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_pfcp_node_id_t node_id; int node_id_len = 0, rv; ogs_debug("Association Setup Response"); - rsp = &pfcp_message.pfcp_association_setup_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_association_setup_response; rv = ogs_pfcp_sockaddr_to_node_id( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, @@ -108,6 +148,7 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_response(uint8_t type, &node_id, &node_id_len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } rsp->node_id.presence = 1; @@ -123,14 +164,20 @@ ogs_pkbuf_t *ogs_pfcp_cp_build_association_setup_response(uint8_t type, rsp->cp_function_features.presence = 1; rsp->cp_function_features.u8 = ogs_pfcp_self()->cp_function_features.octet5; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_request(uint8_t type) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_association_setup_request_t *req = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_pfcp_node_id_t node_id; int node_id_len = 0; @@ -142,8 +189,13 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_request(uint8_t type) ogs_debug("Association Setup Request"); - req = &pfcp_message.pfcp_association_setup_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_association_setup_request; rv = ogs_pfcp_sockaddr_to_node_id( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, @@ -151,6 +203,7 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_request(uint8_t type) &node_id, &node_id_len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } req->node_id.presence = 1; @@ -181,15 +234,21 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_request(uint8_t type) } } - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_response(uint8_t type, uint8_t cause) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_association_setup_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_pfcp_node_id_t node_id; int node_id_len = 0; @@ -201,8 +260,13 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_response(uint8_t type, ogs_debug("Association Setup Response"); - rsp = &pfcp_message.pfcp_association_setup_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_association_setup_response; rv = ogs_pfcp_sockaddr_to_node_id( ogs_pfcp_self()->pfcp_addr, ogs_pfcp_self()->pfcp_addr6, @@ -210,6 +274,7 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_response(uint8_t type, &node_id, &node_id_len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } rsp->node_id.presence = 1; @@ -243,8 +308,13 @@ ogs_pkbuf_t *ogs_pfcp_up_build_association_setup_response(uint8_t type, } } - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } static struct { @@ -817,8 +887,9 @@ static struct { ogs_pkbuf_t *ogs_pfcp_build_session_report_request( uint8_t type, ogs_pfcp_user_plane_report_t *report) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_report_request_t *req = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_pfcp_downlink_data_service_information_t info; unsigned int i; @@ -826,8 +897,13 @@ ogs_pkbuf_t *ogs_pfcp_build_session_report_request( ogs_debug("PFCP session report request"); - req = &pfcp_message.pfcp_session_report_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_report_request; req->report_type.presence = 1; req->report_type.u8 = report->type.value; @@ -938,39 +1014,61 @@ ogs_pkbuf_t *ogs_pfcp_build_session_report_request( report->error_indication.remote_f_teid_len; } - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_build_session_report_response( uint8_t type, uint8_t cause) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_report_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("PFCP session report response"); - rsp = &pfcp_message.pfcp_session_report_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_report_response; rsp->cause.presence = 1; rsp->cause.u8 = cause; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } ogs_pkbuf_t *ogs_pfcp_build_session_deletion_response( uint8_t type, uint8_t cause, ogs_pfcp_user_plane_report_t *report) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_deletion_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; unsigned int i; ogs_debug("PFCP session deletion response"); - rsp = &pfcp_message.pfcp_session_deletion_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_deletion_response; rsp->cause.presence = 1; rsp->cause.u8 = cause; @@ -1025,6 +1123,11 @@ ogs_pkbuf_t *ogs_pfcp_build_session_deletion_response( uint8_t type, uint8_t cau } } } - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } diff --git a/src/sgwc/sxa-build.c b/src/sgwc/sxa-build.c index bafd5fcd5..4c1d22821 100644 --- a/src/sgwc/sxa-build.c +++ b/src/sgwc/sxa-build.c @@ -22,7 +22,7 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( uint8_t type, sgwc_sess_t *sess) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_establishment_request_t *req = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -39,8 +39,13 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( ogs_debug("Session Establishment Request"); ogs_assert(sess); - req = &pfcp_message.pfcp_session_establishment_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_establishment_request; /* Node ID */ rv = ogs_pfcp_sockaddr_to_node_id( @@ -49,6 +54,7 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( &node_id, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } req->node_id.presence = 1; @@ -61,6 +67,7 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( &f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + ogs_free(pfcp_message); return NULL; } f_seid.seid = htobe64(sess->sgwc_sxa_seid); @@ -103,10 +110,12 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( ogs_pfcp_build_create_bar(&req->create_bar, sess->pfcp.bar); } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } @@ -114,7 +123,7 @@ ogs_pkbuf_t *sgwc_sxa_build_session_establishment_request( ogs_pkbuf_t *sgwc_sxa_build_bearer_to_modify_list( uint8_t type, sgwc_sess_t *sess, ogs_pfcp_xact_t *xact) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_modification_request_t *req = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -138,8 +147,13 @@ ogs_pkbuf_t *sgwc_sxa_build_bearer_to_modify_list( modify_flags = xact->modify_flags; ogs_assert(modify_flags); - req = &pfcp_message.pfcp_session_modification_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_modification_request; if (modify_flags & OGS_PFCP_MODIFY_CREATE) { ogs_pfcp_pdrbuf_init(); @@ -254,24 +268,39 @@ ogs_pkbuf_t *sgwc_sxa_build_bearer_to_modify_list( } } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); if (modify_flags & OGS_PFCP_MODIFY_CREATE) { ogs_pfcp_pdrbuf_clear(); } + ogs_free(pfcp_message); + return pkbuf; } ogs_pkbuf_t *sgwc_sxa_build_session_deletion_request( uint8_t type, sgwc_sess_t *sess) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("Session Deletion Request"); ogs_assert(sess); - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } diff --git a/src/sgwu/sxa-build.c b/src/sgwu/sxa-build.c index 777ea987c..8c0fb5939 100644 --- a/src/sgwu/sxa-build.c +++ b/src/sgwu/sxa-build.c @@ -22,7 +22,7 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, sgwu_sess_t *sess, ogs_pfcp_pdr_t *created_pdr[], int num_of_created_pdr) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_establishment_response_t *rsp = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -34,8 +34,13 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, ogs_debug("Session Establishment Response"); - rsp = &pfcp_message.pfcp_session_establishment_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_establishment_response; /* Node ID */ rv = ogs_pfcp_sockaddr_to_node_id( @@ -44,6 +49,7 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, &node_id, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } rsp->node_id.presence = 1; @@ -60,6 +66,7 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, &f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + ogs_free(pfcp_message); return NULL; } f_seid.seid = htobe64(sess->sgwu_sxa_seid); @@ -76,10 +83,12 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, if (pdr_presence == true) j++; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } @@ -87,7 +96,7 @@ ogs_pkbuf_t *sgwu_sxa_build_session_establishment_response(uint8_t type, ogs_pkbuf_t *sgwu_sxa_build_session_modification_response(uint8_t type, sgwu_sess_t *sess, ogs_pfcp_pdr_t *created_pdr[], int num_of_created_pdr) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_modification_response_t *rsp = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -95,8 +104,13 @@ ogs_pkbuf_t *sgwu_sxa_build_session_modification_response(uint8_t type, ogs_debug("Session Modification Response"); - rsp = &pfcp_message.pfcp_session_modification_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_modification_response; /* Cause */ rsp->cause.presence = 1; @@ -111,10 +125,12 @@ ogs_pkbuf_t *sgwu_sxa_build_session_modification_response(uint8_t type, if (pdr_presence == true) j++; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } @@ -122,18 +138,29 @@ ogs_pkbuf_t *sgwu_sxa_build_session_modification_response(uint8_t type, ogs_pkbuf_t *sgwu_sxa_build_session_deletion_response(uint8_t type, sgwu_sess_t *sess) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_deletion_response_t *rsp = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("Session Deletion Response"); - rsp = &pfcp_message.pfcp_session_deletion_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_deletion_response; /* Cause */ rsp->cause.presence = 1; rsp->cause.u8 = OGS_PFCP_CAUSE_REQUEST_ACCEPTED; - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } diff --git a/src/smf/n4-build.c b/src/smf/n4-build.c index d84bfbfcb..bc4b2c261 100644 --- a/src/smf/n4-build.c +++ b/src/smf/n4-build.c @@ -23,7 +23,7 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( uint8_t type, smf_sess_t *sess) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_establishment_request_t *req = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -47,8 +47,13 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( smf_ue = sess->smf_ue; ogs_assert(smf_ue); - req = &pfcp_message.pfcp_session_establishment_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_establishment_request; /* Node ID */ rv = ogs_pfcp_sockaddr_to_node_id( @@ -57,6 +62,7 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( &node_id, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_node_id() failed"); + ogs_free(pfcp_message); return NULL; } req->node_id.presence = 1; @@ -69,6 +75,7 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( &f_seid, &len); if (rv != OGS_OK) { ogs_error("ogs_pfcp_sockaddr_to_f_seid() failed"); + ogs_free(pfcp_message); return NULL; } f_seid.seid = htobe64(sess->smf_n4_seid); @@ -155,10 +162,12 @@ ogs_pkbuf_t *smf_n4_build_session_establishment_request( req->s_nssai.data = &sess->s_nssai; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } @@ -170,7 +179,7 @@ ogs_pkbuf_t *smf_n4_build_pdr_to_modify_list( ogs_pfcp_urr_t *urr = NULL; int i; - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_modification_request_t *req = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -188,8 +197,13 @@ ogs_pkbuf_t *smf_n4_build_pdr_to_modify_list( modify_flags = xact->modify_flags; ogs_assert(modify_flags); - req = &pfcp_message.pfcp_session_modification_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_modification_request; if (modify_flags & OGS_PFCP_MODIFY_CREATE) { ogs_pfcp_pdrbuf_init(); @@ -281,20 +295,23 @@ ogs_pkbuf_t *smf_n4_build_pdr_to_modify_list( i++; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); if (modify_flags & OGS_PFCP_MODIFY_CREATE) { ogs_pfcp_pdrbuf_clear(); } + ogs_free(pfcp_message); + return pkbuf; } ogs_pkbuf_t *smf_n4_build_qos_flow_to_modify_list( uint8_t type, smf_sess_t *sess, ogs_pfcp_xact_t *xact) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_modification_request_t *req = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -319,8 +336,13 @@ ogs_pkbuf_t *smf_n4_build_qos_flow_to_modify_list( modify_flags = xact->modify_flags; ogs_assert(modify_flags); - req = &pfcp_message.pfcp_session_modification_request; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + req = &pfcp_message->pfcp_session_modification_request; if (modify_flags & (OGS_PFCP_MODIFY_CREATE| @@ -491,8 +513,9 @@ ogs_pkbuf_t *smf_n4_build_qos_flow_to_modify_list( } } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); if (modify_flags & (OGS_PFCP_MODIFY_CREATE| @@ -502,17 +525,31 @@ ogs_pkbuf_t *smf_n4_build_qos_flow_to_modify_list( ogs_pfcp_pdrbuf_clear(); } + ogs_free(pfcp_message); + return pkbuf; } ogs_pkbuf_t *smf_n4_build_session_deletion_request( uint8_t type, smf_sess_t *sess) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; + ogs_pkbuf_t *pkbuf = NULL; ogs_debug("Session Deletion Request"); ogs_assert(sess); - pfcp_message.h.type = type; - return ogs_pfcp_build_msg(&pfcp_message); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); + + ogs_free(pfcp_message); + + return pkbuf; } diff --git a/src/upf/n4-build.c b/src/upf/n4-build.c index a8d94935b..d491487f2 100644 --- a/src/upf/n4-build.c +++ b/src/upf/n4-build.c @@ -23,7 +23,7 @@ ogs_pkbuf_t *upf_n4_build_session_establishment_response(uint8_t type, upf_sess_t *sess, ogs_pfcp_pdr_t *created_pdr[], int num_of_created_pdr) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_establishment_response_t *rsp = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -35,8 +35,13 @@ ogs_pkbuf_t *upf_n4_build_session_establishment_response(uint8_t type, ogs_debug("Session Establishment Response"); - rsp = &pfcp_message.pfcp_session_establishment_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_establishment_response; /* Node ID */ ogs_pfcp_sockaddr_to_node_id( @@ -69,10 +74,12 @@ ogs_pkbuf_t *upf_n4_build_session_establishment_response(uint8_t type, if (pdr_presence == true) j++; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } @@ -80,7 +87,7 @@ ogs_pkbuf_t *upf_n4_build_session_establishment_response(uint8_t type, ogs_pkbuf_t *upf_n4_build_session_modification_response(uint8_t type, upf_sess_t *sess, ogs_pfcp_pdr_t *created_pdr[], int num_of_created_pdr) { - ogs_pfcp_message_t pfcp_message; + ogs_pfcp_message_t *pfcp_message = NULL; ogs_pfcp_session_modification_response_t *rsp = NULL; ogs_pkbuf_t *pkbuf = NULL; @@ -88,8 +95,13 @@ ogs_pkbuf_t *upf_n4_build_session_modification_response(uint8_t type, ogs_debug("Session Modification Response"); - rsp = &pfcp_message.pfcp_session_modification_response; - memset(&pfcp_message, 0, sizeof(ogs_pfcp_message_t)); + pfcp_message = ogs_calloc(1, sizeof(*pfcp_message)); + if (!pfcp_message) { + ogs_error("ogs_calloc() failed"); + return NULL; + } + + rsp = &pfcp_message->pfcp_session_modification_response; /* Cause */ rsp->cause.presence = 1; @@ -104,10 +116,12 @@ ogs_pkbuf_t *upf_n4_build_session_modification_response(uint8_t type, if (pdr_presence == true) j++; } - pfcp_message.h.type = type; - pkbuf = ogs_pfcp_build_msg(&pfcp_message); + pfcp_message->h.type = type; + pkbuf = ogs_pfcp_build_msg(pfcp_message); + ogs_expect(pkbuf); ogs_pfcp_pdrbuf_clear(); + ogs_free(pfcp_message); return pkbuf; } From 43eb5f3d7f33e843da5f7dfed1f317990ca89603 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 19:06:01 +0900 Subject: [PATCH 18/20] Fixed warning --- lib/proto/types.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/proto/types.c b/lib/proto/types.c index 7c87e8204..e5fb5cba1 100644 --- a/lib/proto/types.c +++ b/lib/proto/types.c @@ -464,7 +464,7 @@ int ogs_sockaddr_to_ip( ogs_error("No IP"); return OGS_ERROR; } - if (!addr && !addr) { + if (!addr && !addr6) { ogs_error("No Address"); return OGS_ERROR; } From 218b31d006c53332bf7389934edf78b9cab294f7 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 21:43:20 +0900 Subject: [PATCH 19/20] [CORE] Increase SDU buffer to 32k (#2008) --- lib/app/ogs-context.c | 8 +++++-- lib/core/ogs-macros.h | 4 ++++ lib/core/ogs-pkbuf.c | 46 ++++++++++++++++++++++++++------------ lib/core/ogs-pkbuf.h | 3 ++- lib/core/ogs-strings.h | 2 -- lib/diameter/common/init.c | 12 +++++++--- lib/proto/types.h | 2 -- lib/sbi/client.c | 2 +- lib/sbi/message.c | 6 ++--- lib/sbi/mhd-server.c | 2 +- 10 files changed, 58 insertions(+), 29 deletions(-) diff --git a/lib/app/ogs-context.c b/lib/app/ogs-context.c index 98a1a98d8..7e4565952 100644 --- a/lib/app/ogs-context.c +++ b/lib/app/ogs-context.c @@ -425,10 +425,14 @@ int ogs_app_context_parse_config(void) const char *v = ogs_yaml_iter_value(&pool_iter); if (v) self.pool.defconfig.cluster_2048_pool = atoi(v); - } else if (!strcmp(pool_key, "16384")) { + } else if (!strcmp(pool_key, "8192")) { const char *v = ogs_yaml_iter_value(&pool_iter); if (v) - self.pool.defconfig.cluster_16384_pool = atoi(v); + self.pool.defconfig.cluster_8192_pool = atoi(v); + } else if (!strcmp(pool_key, "32768")) { + const char *v = ogs_yaml_iter_value(&pool_iter); + if (v) + self.pool.defconfig.cluster_32768_pool = atoi(v); } else if (!strcmp(pool_key, "big")) { const char *v = ogs_yaml_iter_value(&pool_iter); if (v) diff --git a/lib/core/ogs-macros.h b/lib/core/ogs-macros.h index b0784324d..85710a6d9 100644 --- a/lib/core/ogs-macros.h +++ b/lib/core/ogs-macros.h @@ -206,6 +206,10 @@ static ogs_inline ogs_uint24_t ogs_htobe24(ogs_uint24_t x) #define OGS_MAX_FILEPATH_LEN 256 #define OGS_MAX_IFNAME_LEN 32 +#define OGS_MAX_SDU_LEN 32768 /* Should Heap */ +#define OGS_HUGE_LEN 8192 /* Can Stack */ +#define OGS_MAX_PKT_LEN 2048 + #define OGS_FILE_LINE __FILE__ ":" OGS_STRINGIFY(__LINE__) #define ogs_uint64_to_uint32(x) ((x >= 0xffffffffUL) ? 0xffffffffU : x) diff --git a/lib/core/ogs-pkbuf.c b/lib/core/ogs-pkbuf.c index ed7048622..d5843eeac 100644 --- a/lib/core/ogs-pkbuf.c +++ b/lib/core/ogs-pkbuf.c @@ -28,7 +28,8 @@ #define OGS_CLUSTER_512_SIZE 512 #define OGS_CLUSTER_1024_SIZE 1024 #define OGS_CLUSTER_2048_SIZE 2048 -#define OGS_CLUSTER_16384_SIZE 16384 +#define OGS_CLUSTER_8192_SIZE 8192 +#define OGS_CLUSTER_32768_SIZE 32768 /* * @@ -48,7 +49,8 @@ typedef uint8_t ogs_cluster_256_t[OGS_CLUSTER_256_SIZE]; typedef uint8_t ogs_cluster_512_t[OGS_CLUSTER_512_SIZE]; typedef uint8_t ogs_cluster_1024_t[OGS_CLUSTER_1024_SIZE]; typedef uint8_t ogs_cluster_2048_t[OGS_CLUSTER_2048_SIZE]; -typedef uint8_t ogs_cluster_16384_t[OGS_CLUSTER_16384_SIZE]; +typedef uint8_t ogs_cluster_8192_t[OGS_CLUSTER_8192_SIZE]; +typedef uint8_t ogs_cluster_32768_t[OGS_CLUSTER_32768_SIZE]; typedef uint8_t ogs_cluster_big_t[OGS_CLUSTER_BIG_SIZE]; OGS_STATIC_ASSERT(sizeof(ogs_cluster_128_t) % sizeof(void *) == 0); @@ -56,7 +58,8 @@ OGS_STATIC_ASSERT(sizeof(ogs_cluster_256_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_512_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_1024_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_2048_t) % sizeof(void *) == 0); -OGS_STATIC_ASSERT(sizeof(ogs_cluster_16384_t) % sizeof(void *) == 0); +OGS_STATIC_ASSERT(sizeof(ogs_cluster_8192_t) % sizeof(void *) == 0); +OGS_STATIC_ASSERT(sizeof(ogs_cluster_32768_t) % sizeof(void *) == 0); OGS_STATIC_ASSERT(sizeof(ogs_cluster_big_t) % sizeof(void *) == 0); typedef struct ogs_pkbuf_pool_s { @@ -68,7 +71,8 @@ typedef struct ogs_pkbuf_pool_s { OGS_POOL(cluster_512, ogs_cluster_512_t); OGS_POOL(cluster_1024, ogs_cluster_1024_t); OGS_POOL(cluster_2048, ogs_cluster_2048_t); - OGS_POOL(cluster_16384, ogs_cluster_16384_t); + OGS_POOL(cluster_8192, ogs_cluster_8192_t); + OGS_POOL(cluster_32768, ogs_cluster_32768_t); OGS_POOL(cluster_big, ogs_cluster_big_t); ogs_thread_mutex_t mutex; @@ -116,7 +120,8 @@ void ogs_pkbuf_default_init(ogs_pkbuf_config_t *config) config->cluster_512_pool = 4096; config->cluster_1024_pool = 2048; config->cluster_2048_pool = 1024; - config->cluster_16384_pool = 512; + config->cluster_8192_pool = 256; + config->cluster_32768_pool = 64; config->cluster_big_pool = 8; #endif } @@ -151,8 +156,8 @@ ogs_pkbuf_pool_t *ogs_pkbuf_pool_create(ogs_pkbuf_config_t *config) tmp = config->cluster_128_pool + config->cluster_256_pool + config->cluster_512_pool + config->cluster_1024_pool + - config->cluster_2048_pool + config->cluster_16384_pool + - config->cluster_big_pool; + config->cluster_2048_pool + config->cluster_8192_pool + + config->cluster_32768_pool + config->cluster_big_pool; ogs_pool_init(&pool->pkbuf, tmp); ogs_pool_init(&pool->cluster, tmp); @@ -162,7 +167,8 @@ ogs_pkbuf_pool_t *ogs_pkbuf_pool_create(ogs_pkbuf_config_t *config) ogs_pool_init(&pool->cluster_512, config->cluster_512_pool); ogs_pool_init(&pool->cluster_1024, config->cluster_1024_pool); ogs_pool_init(&pool->cluster_2048, config->cluster_2048_pool); - ogs_pool_init(&pool->cluster_16384, config->cluster_16384_pool); + ogs_pool_init(&pool->cluster_8192, config->cluster_8192_pool); + ogs_pool_init(&pool->cluster_32768, config->cluster_32768_pool); ogs_pool_init(&pool->cluster_big, config->cluster_big_pool); #endif @@ -200,7 +206,8 @@ void ogs_pkbuf_pool_destroy(ogs_pkbuf_pool_t *pool) ogs_pool_final(&pool->cluster_512); ogs_pool_final(&pool->cluster_1024); ogs_pool_final(&pool->cluster_2048); - ogs_pool_final(&pool->cluster_16384); + ogs_pool_final(&pool->cluster_8192); + ogs_pool_final(&pool->cluster_32768); ogs_pool_final(&pool->cluster_big); ogs_thread_mutex_destroy(&pool->mutex); @@ -405,13 +412,20 @@ static ogs_cluster_t *cluster_alloc( return NULL; } cluster->size = OGS_CLUSTER_2048_SIZE; - } else if (size <= OGS_CLUSTER_16384_SIZE) { - ogs_pool_alloc(&pool->cluster_16384, (ogs_cluster_16384_t**)&buffer); + } else if (size <= OGS_CLUSTER_8192_SIZE) { + ogs_pool_alloc(&pool->cluster_8192, (ogs_cluster_8192_t**)&buffer); if (!buffer) { ogs_error("ogs_pool_alloc() failed"); return NULL; } - cluster->size = OGS_CLUSTER_16384_SIZE; + cluster->size = OGS_CLUSTER_8192_SIZE; + } else if (size <= OGS_CLUSTER_32768_SIZE) { + ogs_pool_alloc(&pool->cluster_32768, (ogs_cluster_32768_t**)&buffer); + if (!buffer) { + ogs_error("ogs_pool_alloc() failed"); + return NULL; + } + cluster->size = OGS_CLUSTER_32768_SIZE; } else if (size <= OGS_CLUSTER_BIG_SIZE) { ogs_pool_alloc(&pool->cluster_big, (ogs_cluster_big_t**)&buffer); if (!buffer) { @@ -452,9 +466,13 @@ static void cluster_free(ogs_pkbuf_pool_t *pool, ogs_cluster_t *cluster) ogs_pool_free( &pool->cluster_2048, (ogs_cluster_2048_t*)cluster->buffer); break; - case OGS_CLUSTER_16384_SIZE: + case OGS_CLUSTER_8192_SIZE: ogs_pool_free( - &pool->cluster_16384, (ogs_cluster_16384_t*)cluster->buffer); + &pool->cluster_8192, (ogs_cluster_8192_t*)cluster->buffer); + break; + case OGS_CLUSTER_32768_SIZE: + ogs_pool_free( + &pool->cluster_32768, (ogs_cluster_32768_t*)cluster->buffer); break; case OGS_CLUSTER_BIG_SIZE: ogs_pool_free(&pool->cluster_big, (ogs_cluster_big_t*)cluster->buffer); diff --git a/lib/core/ogs-pkbuf.h b/lib/core/ogs-pkbuf.h index 21916a19e..ba81c2622 100644 --- a/lib/core/ogs-pkbuf.h +++ b/lib/core/ogs-pkbuf.h @@ -68,7 +68,8 @@ typedef struct ogs_pkbuf_config_s { int cluster_512_pool; int cluster_1024_pool; int cluster_2048_pool; - int cluster_16384_pool; + int cluster_8192_pool; + int cluster_32768_pool; int cluster_big_pool; } ogs_pkbuf_config_t; diff --git a/lib/core/ogs-strings.h b/lib/core/ogs-strings.h index 3dc6d27c4..21eecf455 100644 --- a/lib/core/ogs-strings.h +++ b/lib/core/ogs-strings.h @@ -54,8 +54,6 @@ extern "C" { #endif -#define OGS_HUGE_LEN 16384 - #if defined(_WIN32) #define ogs_strtok_r strtok_s #define ogs_strcasecmp _stricmp diff --git a/lib/diameter/common/init.c b/lib/diameter/common/init.c index fbf431d54..834380b52 100644 --- a/lib/diameter/common/init.c +++ b/lib/diameter/common/init.c @@ -98,15 +98,19 @@ static void diam_gnutls_log_func(int level, const char *str) static void diam_log_func(int printlevel, const char *format, va_list ap) { - char buffer[OGS_HUGE_LEN*2]; + char *buffer = NULL; int ret = 0; + buffer = ogs_calloc(1, OGS_MAX_SDU_LEN); + ogs_assert(buffer); + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" - ret = ogs_vsnprintf(buffer, OGS_HUGE_LEN*2, format, ap); + ret = ogs_vsnprintf(buffer, OGS_MAX_SDU_LEN, format, ap); #pragma GCC diagnostic pop - if (ret < 0 || ret > OGS_HUGE_LEN*2) { + if (ret < 0 || ret > OGS_MAX_SDU_LEN) { ogs_error("vsnprintf() failed[ret=%d]", ret); + ogs_free(buffer); return; } @@ -142,4 +146,6 @@ static void diam_log_func(int printlevel, const char *format, va_list ap) diam_log_printf(OGS_LOG_ERROR, "[%d] %s\n", printlevel, buffer); break; } + + ogs_free(buffer); } diff --git a/lib/proto/types.h b/lib/proto/types.h index f31d42838..5bb8587f5 100644 --- a/lib/proto/types.h +++ b/lib/proto/types.h @@ -52,8 +52,6 @@ extern "C" { #define OGS_MAX_NUM_OF_GTPU_RESOURCE 4 #define OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI 8 -#define OGS_MAX_SDU_LEN OGS_HUGE_LEN -#define OGS_MAX_PKT_LEN 2048 #define OGS_PLMN_ID_LEN 3 #define OGS_MAX_PLMN_ID_BCD_LEN 6 diff --git a/lib/sbi/client.c b/lib/sbi/client.c index 6eefe2da7..c1d8d7128 100644 --- a/lib/sbi/client.c +++ b/lib/sbi/client.c @@ -382,7 +382,7 @@ static connection_t *connection_add( request->h.uri = uri; } - curl_easy_setopt(conn->easy, CURLOPT_BUFFERSIZE, OGS_MAX_SDU_LEN*2); + curl_easy_setopt(conn->easy, CURLOPT_BUFFERSIZE, OGS_MAX_SDU_LEN); curl_easy_setopt(conn->easy, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(conn->easy, CURLOPT_SSL_VERIFYHOST, 0); diff --git a/lib/sbi/message.c b/lib/sbi/message.c index ccecfd882..6fb809c0e 100644 --- a/lib/sbi/message.c +++ b/lib/sbi/message.c @@ -2239,7 +2239,7 @@ static int on_part_data( } else { offset = data->part[data->num_of_part].content_length; if ((data->part[data->num_of_part].content_length + length) > - OGS_HUGE_LEN) { + OGS_MAX_SDU_LEN) { ogs_error("Overflow length [%d:%d]", (int)data->part[data->num_of_part].content_length, (int)length); @@ -2414,12 +2414,12 @@ static bool build_multipart( strcpy(boundary, "=-"); ogs_base64_encode_binary(boundary + 2, digest, 16); - p = http->content = ogs_calloc(1, OGS_HUGE_LEN); + p = http->content = ogs_calloc(1, OGS_MAX_SDU_LEN); if (!p) { ogs_error("ogs_calloc() failed"); return false; } - last = p + OGS_HUGE_LEN; + last = p + OGS_MAX_SDU_LEN; /* First boundary */ p = ogs_slprintf(p, last, "--%s\r\n", boundary); diff --git a/lib/sbi/mhd-server.c b/lib/sbi/mhd-server.c index aadf0aec0..817a448aa 100644 --- a/lib/sbi/mhd-server.c +++ b/lib/sbi/mhd-server.c @@ -543,7 +543,7 @@ static _MHD_Result access_handler( } else { offset = request->http.content_length; if ((request->http.content_length + - *upload_data_size) > OGS_HUGE_LEN) { + *upload_data_size) > OGS_MAX_SDU_LEN) { ogs_error("Overflow : Content-Length[%d], upload_data_size[%d]", (int)request->http.content_length, (int)*upload_data_size); From 596a2f1b5e692ce3c89ce2df64baded926d07ad7 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 24 Jan 2023 21:55:06 +0900 Subject: [PATCH 20/20] [SBI] Fixed crash if no BW Unit(Xbps) (#2000) --- lib/sbi/conv.c | 5 +++++ src/pcf/npcf-handler.c | 22 ++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/sbi/conv.c b/lib/sbi/conv.c index 94ca23ace..4790e5ef2 100644 --- a/lib/sbi/conv.c +++ b/lib/sbi/conv.c @@ -540,6 +540,11 @@ uint64_t ogs_sbi_bitrate_from_string(char *str) unit = strrchr(str, ' '); bitrate = atoll(str); + if (!unit) { + ogs_error("No Unit [%s]", str); + return bitrate; + } + SWITCH(unit+1) CASE("Kbps") return bitrate * 1024; diff --git a/src/pcf/npcf-handler.c b/src/pcf/npcf-handler.c index 97cbfc04d..5a3a29643 100644 --- a/src/pcf/npcf-handler.c +++ b/src/pcf/npcf-handler.c @@ -633,6 +633,13 @@ bool pcf_npcf_policyauthorization_handle_create(pcf_sess_t *sess, uint8_t qos_index = 0; ogs_media_component_t *media_component = &ims_data.media_component[i]; + if (media_component->media_type == OpenAPI_media_type_NULL) { + strerror = ogs_msprintf("[%s:%d] Media-Type is Required", + pcf_ue->supi, sess->psi); + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; + goto cleanup; + } + switch(media_component->media_type) { case OpenAPI_media_type_AUDIO: qos_index = OGS_QOS_INDEX_1; @@ -644,9 +651,9 @@ bool pcf_npcf_policyauthorization_handle_create(pcf_sess_t *sess, qos_index = OGS_QOS_INDEX_5; break; default: - strerror = ogs_msprintf("[%s:%d] Not implemented : [Media-Type:%d]", + strerror = ogs_msprintf("[%s:%d] Unknown Media-Type [%d]", pcf_ue->supi, sess->psi, media_component->media_type); - status = OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR; + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; goto cleanup; } @@ -1046,6 +1053,13 @@ bool pcf_npcf_policyauthorization_handle_update( uint8_t qos_index = 0; ogs_media_component_t *media_component = &ims_data.media_component[i]; + if (media_component->media_type == OpenAPI_media_type_NULL) { + strerror = ogs_msprintf("[%s:%d] Media-Type is Required", + pcf_ue->supi, sess->psi); + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; + goto cleanup; + } + switch(media_component->media_type) { case OpenAPI_media_type_AUDIO: qos_index = OGS_QOS_INDEX_1; @@ -1057,9 +1071,9 @@ bool pcf_npcf_policyauthorization_handle_update( qos_index = OGS_QOS_INDEX_5; break; default: - strerror = ogs_msprintf("[%s:%d] Not implemented : [Media-Type:%d]", + strerror = ogs_msprintf("[%s:%d] Unknown Media-Type [%d]", pcf_ue->supi, sess->psi, media_component->media_type); - status = OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR; + status = OGS_SBI_HTTP_STATUS_BAD_REQUEST; goto cleanup; }