mirror of
https://github.com/open5gs/open5gs.git
synced 2025-10-23 07:41:57 +00:00
[SMF] Add check for relay peer in ogs_diam_is_relay_or_app_advertised function (#3589)
Modify the function to return true if the peer is a relay, otherwise check for advertised application.
This commit is contained in:
@@ -90,7 +90,7 @@ int ogs_diam_start(void);
|
||||
void ogs_diam_final(void);
|
||||
|
||||
int ogs_diam_config_init(ogs_diam_config_t *fd_config);
|
||||
bool ogs_diam_app_connected(uint32_t app_id);
|
||||
bool ogs_diam_is_relay_or_app_advertised(uint32_t app_id);
|
||||
|
||||
int fd_avp_search_avp ( struct avp * groupedavp,
|
||||
struct dict_object * what, struct avp ** avp );
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "ogs-diameter-common.h"
|
||||
|
||||
bool ogs_diam_app_connected(uint32_t app_id)
|
||||
bool ogs_diam_is_relay_or_app_advertised(uint32_t app_id)
|
||||
{
|
||||
struct fd_list *li = NULL;
|
||||
struct fd_app *found = NULL;
|
||||
@@ -36,18 +36,23 @@ bool ogs_diam_app_connected(uint32_t app_id)
|
||||
if (state == STATE_OPEN) {
|
||||
ogs_debug("'%s' STATE is OPEN", p->info.pi_diamid);
|
||||
|
||||
/* Check if the remote peer advertised the message's appli */
|
||||
fd_app_check(&p->info.runtime.pir_apps, app_id, &found);
|
||||
|
||||
if (found) break;
|
||||
if (p->info.runtime.pir_relay) {
|
||||
ogs_debug("'%s' RELAY is enabled", p->info.pi_diamid);
|
||||
CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) );
|
||||
return true;
|
||||
} else {
|
||||
/* Check if the remote peer advertised the message's appli */
|
||||
fd_app_check(&p->info.runtime.pir_apps, app_id, &found);
|
||||
if (found) {
|
||||
CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ogs_debug("'%s' STATE[%d] is NOT open ", p->info.pi_diamid, state);
|
||||
}
|
||||
}
|
||||
CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) );
|
||||
|
||||
if (found)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
@@ -53,9 +53,11 @@ int smf_use_gy_iface(void)
|
||||
{
|
||||
switch (smf_self()->ctf_config.enabled) {
|
||||
case SMF_CTF_ENABLED_AUTO:
|
||||
return ogs_diam_app_connected(OGS_DIAM_GY_APPLICATION_ID) ? 1 : 0;
|
||||
return ogs_diam_is_relay_or_app_advertised(
|
||||
OGS_DIAM_GY_APPLICATION_ID) ? 1 : 0;
|
||||
case SMF_CTF_ENABLED_YES:
|
||||
return ogs_diam_app_connected(OGS_DIAM_GY_APPLICATION_ID) ? 1 : -1;
|
||||
return ogs_diam_is_relay_or_app_advertised(
|
||||
OGS_DIAM_GY_APPLICATION_ID) ? 1 : -1;
|
||||
case SMF_CTF_ENABLED_NO:
|
||||
return 0;
|
||||
default:
|
||||
|
@@ -110,7 +110,7 @@ uint8_t smf_gn_handle_create_pdp_context_request(
|
||||
cause_value = OGS_GTP1_CAUSE_MANDATORY_IE_MISSING;
|
||||
}
|
||||
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
ogs_error("No Gx Diameter Peer");
|
||||
cause_value = OGS_GTP1_CAUSE_NO_RESOURCES_AVAILABLE;
|
||||
}
|
||||
@@ -309,7 +309,7 @@ uint8_t smf_gn_handle_delete_pdp_context_request(
|
||||
{
|
||||
ogs_debug("Delete PDP Context Request");
|
||||
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
ogs_error("No Gx Diameter Peer");
|
||||
return OGS_GTP1_CAUSE_NO_RESOURCES_AVAILABLE;
|
||||
}
|
||||
|
@@ -155,7 +155,7 @@ uint8_t smf_s5c_handle_create_session_request(
|
||||
cause_value = OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
|
||||
}
|
||||
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
ogs_error("No Gx Diameter Peer");
|
||||
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
|
||||
}
|
||||
@@ -172,7 +172,7 @@ uint8_t smf_s5c_handle_create_session_request(
|
||||
}
|
||||
break;
|
||||
case OGS_GTP2_RAT_TYPE_WLAN:
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_S6B_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_S6B_APPLICATION_ID)) {
|
||||
ogs_error("No S6b Diameter Peer");
|
||||
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
|
||||
}
|
||||
@@ -485,13 +485,13 @@ uint8_t smf_s5c_handle_delete_session_request(
|
||||
ogs_assert(xact);
|
||||
ogs_assert(req);
|
||||
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_GX_APPLICATION_ID)) {
|
||||
ogs_error("No Gx Diameter Peer");
|
||||
return OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_WLAN) {
|
||||
if (!ogs_diam_app_connected(OGS_DIAM_S6B_APPLICATION_ID)) {
|
||||
if (!ogs_diam_is_relay_or_app_advertised(OGS_DIAM_S6B_APPLICATION_ID)) {
|
||||
ogs_error("No S6b Diameter Peer");
|
||||
return OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
|
||||
}
|
||||
|
Reference in New Issue
Block a user