diff --git a/lib/pfcp/conv.c b/lib/pfcp/conv.c index 1b01d2a24..ce4dbda54 100644 --- a/lib/pfcp/conv.c +++ b/lib/pfcp/conv.c @@ -180,8 +180,8 @@ int ogs_pfcp_sockaddr_to_f_teid( { const int hdr_len = 5; - ogs_assert(addr || addr6); - ogs_assert(f_teid); + ogs_expect_or_return_val(addr || addr6, OGS_ERROR); + ogs_expect_or_return_val(f_teid, OGS_ERROR); memset(f_teid, 0, sizeof *f_teid); if (addr && addr6) { @@ -201,7 +201,7 @@ int ogs_pfcp_sockaddr_to_f_teid( memcpy(f_teid->addr6, addr6->sin6.sin6_addr.s6_addr, OGS_IPV6_LEN); *len = OGS_IPV6_LEN + hdr_len; } else - ogs_assert_if_reached(); + ogs_expect_or_return_val(0, OGS_ERROR); return OGS_OK; } diff --git a/lib/pfcp/handler.c b/lib/pfcp/handler.c index c2d985f07..4cac5f61c 100644 --- a/lib/pfcp/handler.c +++ b/lib/pfcp/handler.c @@ -72,6 +72,15 @@ void ogs_pfcp_cp_handle_association_setup_request( node->up_function_features_len); } } + + if (node->up_function_features.ftup == 0) { + char buf[OGS_ADDRSTRLEN]; + ogs_sockaddr_t *addr = node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + } } void ogs_pfcp_cp_handle_association_setup_response( @@ -107,6 +116,15 @@ void ogs_pfcp_cp_handle_association_setup_response( node->up_function_features_len); } } + + if (node->up_function_features.ftup == 0) { + char buf[OGS_ADDRSTRLEN]; + ogs_sockaddr_t *addr = node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + } } void ogs_pfcp_up_handle_association_setup_request( diff --git a/src/sgwc/context.c b/src/sgwc/context.c index 0ef8e2bf5..878e697d9 100644 --- a/src/sgwc/context.c +++ b/src/sgwc/context.c @@ -630,7 +630,6 @@ sgwc_tunnel_t *sgwc_tunnel_add( { sgwc_sess_t *sess = NULL; sgwc_tunnel_t *tunnel = NULL; - ogs_gtpu_resource_t *resource = NULL; ogs_pfcp_pdr_t *pdr = NULL; ogs_pfcp_far_t *far = NULL; @@ -707,6 +706,14 @@ sgwc_tunnel_t *sgwc_tunnel_add( pdr->f_teid.ch = 1; pdr->f_teid_len = 1; } else { + char buf[OGS_ADDRSTRLEN]; + ogs_gtpu_resource_t *resource = NULL; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + resource = ogs_pfcp_find_gtpu_resource( &sess->pfcp_node->gtpu_resource_list, sess->session.name, OGS_PFCP_INTERFACE_ACCESS); @@ -730,9 +737,10 @@ sgwc_tunnel_t *sgwc_tunnel_add( tunnel->local_teid = tunnel->index; } - ogs_assert(tunnel->local_addr || tunnel->local_addr6); - ogs_pfcp_sockaddr_to_f_teid(tunnel->local_addr, tunnel->local_addr6, - &pdr->f_teid, &pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + tunnel->local_addr, tunnel->local_addr6, + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = tunnel->local_teid; } diff --git a/src/sgwu/sxa-handler.c b/src/sgwu/sxa-handler.c index 0efb2cafa..901c0653a 100644 --- a/src/sgwu/sxa-handler.c +++ b/src/sgwu/sxa-handler.c @@ -129,13 +129,11 @@ void sgwu_sxa_handle_session_establishment_request( else pdr->f_teid.teid = pdr->index; } else { - ogs_assert( - ogs_gtp_self()->gtpu_addr || - ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &pdr->f_teid, &pdr->f_teid_len); + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } } @@ -335,13 +333,11 @@ void sgwu_sxa_handle_session_modification_request( else pdr->f_teid.teid = pdr->index; } else { - ogs_assert( - ogs_gtp_self()->gtpu_addr || - ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &pdr->f_teid, &pdr->f_teid_len); + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } } diff --git a/src/smf/binding.c b/src/smf/binding.c index f1cac5e72..d7ff6dc6c 100644 --- a/src/smf/binding.c +++ b/src/smf/binding.c @@ -169,7 +169,16 @@ void smf_bearer_binding(smf_sess_t *sess) ul_pdr->f_teid.ch = 1; ul_pdr->f_teid_len = 1; } else { - ogs_gtpu_resource_t *resource = ogs_pfcp_find_gtpu_resource( + char buf[OGS_ADDRSTRLEN]; + ogs_gtpu_resource_t *resource = NULL; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported " + "with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + + resource = ogs_pfcp_find_gtpu_resource( &sess->pfcp_node->gtpu_resource_list, sess->session.name, OGS_PFCP_INTERFACE_ACCESS); if (resource) { @@ -196,10 +205,10 @@ void smf_bearer_binding(smf_sess_t *sess) bearer->pgw_s5u_teid = bearer->index; } - ogs_assert(bearer->pgw_s5u_addr || bearer->pgw_s5u_addr6); - ogs_pfcp_sockaddr_to_f_teid(bearer->pgw_s5u_addr, - bearer->pgw_s5u_addr6, - &ul_pdr->f_teid, &ul_pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, + &ul_pdr->f_teid, &ul_pdr->f_teid_len)); ul_pdr->f_teid.teid = bearer->pgw_s5u_teid; } @@ -480,10 +489,18 @@ void smf_qos_flow_binding(smf_sess_t *sess, ogs_sbi_stream_t *stream) ul_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; ul_pdr->f_teid_len = 2; } else { - ogs_assert(sess->upf_n3_addr || sess->upf_n3_addr6); - ogs_pfcp_sockaddr_to_f_teid( + char buf[OGS_ADDRSTRLEN]; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported " + "with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( sess->upf_n3_addr, sess->upf_n3_addr6, - &ul_pdr->f_teid, &ul_pdr->f_teid_len); + &ul_pdr->f_teid, &ul_pdr->f_teid_len)); ul_pdr->f_teid.teid = sess->upf_n3_teid; } diff --git a/src/smf/context.c b/src/smf/context.c index f303d86d3..eeeb01f01 100644 --- a/src/smf/context.c +++ b/src/smf/context.c @@ -1669,11 +1669,17 @@ void smf_sess_create_indirect_data_forwarding(smf_sess_t *sess) pdr->f_teid.choose_id = OGS_PFCP_INDIRECT_DATA_FORWARDING_CHOOSE_ID; pdr->f_teid_len = 2; } else { - ogs_assert(sess->upf_n3_addr || sess->upf_n3_addr6); + char buf[OGS_ADDRSTRLEN]; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); - ogs_pfcp_sockaddr_to_f_teid( + ogs_error("F-TEID allocation/release not supported " + "with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( sess->upf_n3_addr, sess->upf_n3_addr6, - &pdr->f_teid, &pdr->f_teid_len); + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = sess->upf_n3_teid; } diff --git a/src/smf/gx-handler.c b/src/smf/gx-handler.c index d040079b8..ec241aab4 100644 --- a/src/smf/gx-handler.c +++ b/src/smf/gx-handler.c @@ -197,7 +197,15 @@ void smf_gx_handle_cca_initial_request( up2cp_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; up2cp_pdr->f_teid_len = 2; } else { - ogs_gtpu_resource_t *resource = ogs_pfcp_find_gtpu_resource( + char buf[OGS_ADDRSTRLEN]; + ogs_gtpu_resource_t *resource = NULL; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + + resource = ogs_pfcp_find_gtpu_resource( &sess->pfcp_node->gtpu_resource_list, sess->session.name, OGS_PFCP_INTERFACE_ACCESS); if (resource) { @@ -221,19 +229,22 @@ void smf_gx_handle_cca_initial_request( bearer->pgw_s5u_teid = bearer->index; } - ogs_assert(bearer->pgw_s5u_addr || bearer->pgw_s5u_addr6); - ogs_pfcp_sockaddr_to_f_teid(bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, - &ul_pdr->f_teid, &ul_pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, + &ul_pdr->f_teid, &ul_pdr->f_teid_len)); ul_pdr->f_teid.teid = bearer->pgw_s5u_teid; - ogs_assert(ogs_gtp_self()->gtpu_addr || ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &cp2up_pdr->f_teid, &cp2up_pdr->f_teid_len); + &cp2up_pdr->f_teid, &cp2up_pdr->f_teid_len)); cp2up_pdr->f_teid.teid = bearer->index; - ogs_pfcp_sockaddr_to_f_teid(sess->upf_n3_addr, sess->upf_n3_addr6, - &up2cp_pdr->f_teid, &up2cp_pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, + &up2cp_pdr->f_teid, &up2cp_pdr->f_teid_len)); up2cp_pdr->f_teid.teid = bearer->pgw_s5u_teid; } diff --git a/src/smf/npcf-handler.c b/src/smf/npcf-handler.c index 0a15e3782..0533a1afc 100644 --- a/src/smf/npcf-handler.c +++ b/src/smf/npcf-handler.c @@ -37,7 +37,6 @@ bool smf_npcf_smpolicycontrol_handle_create( smf_ue_t *smf_ue = NULL; smf_bearer_t *qos_flow = NULL; - ogs_gtpu_resource_t *resource = NULL; ogs_pfcp_pdr_t *dl_pdr = NULL; ogs_pfcp_pdr_t *ul_pdr = NULL; ogs_pfcp_pdr_t *cp2up_pdr = NULL; @@ -439,6 +438,14 @@ bool smf_npcf_smpolicycontrol_handle_create( up2cp_pdr->f_teid.choose_id = OGS_PFCP_DEFAULT_CHOOSE_ID; up2cp_pdr->f_teid_len = 2; } else { + char buf[OGS_ADDRSTRLEN]; + ogs_gtpu_resource_t *resource = NULL; + ogs_sockaddr_t *addr = sess->pfcp_node->sa_list; + ogs_assert(addr); + + ogs_error("F-TEID allocation/release not supported with peer [%s]:%d", + OGS_ADDR(addr, buf), OGS_PORT(addr)); + resource = ogs_pfcp_find_gtpu_resource( &sess->pfcp_node->gtpu_resource_list, sess->session.name, OGS_PFCP_INTERFACE_ACCESS); @@ -462,20 +469,22 @@ bool smf_npcf_smpolicycontrol_handle_create( sess->upf_n3_teid = sess->index; } - ogs_assert(sess->upf_n3_addr || sess->upf_n3_addr6); - - ogs_pfcp_sockaddr_to_f_teid(sess->upf_n3_addr, sess->upf_n3_addr6, - &ul_pdr->f_teid, &ul_pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + sess->upf_n3_addr, sess->upf_n3_addr6, + &ul_pdr->f_teid, &ul_pdr->f_teid_len)); ul_pdr->f_teid.teid = sess->upf_n3_teid; - ogs_assert(ogs_gtp_self()->gtpu_addr || ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &cp2up_pdr->f_teid, &cp2up_pdr->f_teid_len); + &cp2up_pdr->f_teid, &cp2up_pdr->f_teid_len)); cp2up_pdr->f_teid.teid = sess->index; - ogs_pfcp_sockaddr_to_f_teid(sess->upf_n3_addr, sess->upf_n3_addr6, - &up2cp_pdr->f_teid, &up2cp_pdr->f_teid_len); + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( + sess->upf_n3_addr, sess->upf_n3_addr6, + &up2cp_pdr->f_teid, &up2cp_pdr->f_teid_len)); up2cp_pdr->f_teid.teid = sess->upf_n3_teid; } diff --git a/src/upf/n4-handler.c b/src/upf/n4-handler.c index 96ea498d7..15dc5ef29 100644 --- a/src/upf/n4-handler.c +++ b/src/upf/n4-handler.c @@ -134,13 +134,11 @@ void upf_n4_handle_session_establishment_request( else pdr->f_teid.teid = pdr->index; } else { - ogs_assert( - ogs_gtp_self()->gtpu_addr || - ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &pdr->f_teid, &pdr->f_teid_len); + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } } @@ -348,13 +346,11 @@ void upf_n4_handle_session_modification_request( else pdr->f_teid.teid = pdr->index; } else { - ogs_assert( - ogs_gtp_self()->gtpu_addr || - ogs_gtp_self()->gtpu_addr6); - ogs_pfcp_sockaddr_to_f_teid( + ogs_assert(OGS_OK == + ogs_pfcp_sockaddr_to_f_teid( ogs_gtp_self()->gtpu_addr, ogs_gtp_self()->gtpu_addr6, - &pdr->f_teid, &pdr->f_teid_len); + &pdr->f_teid, &pdr->f_teid_len)); pdr->f_teid.teid = pdr->index; } }