Reorder smf_gtp_node objects free (#1593)
smf_gtp_node_pool were properly freed. However, the seqence was wrong, so we got a warning message. To solve this problem, I've moved smf_gtp_node_alloc/free from gtp_path.[ch] to context.[ch]
This commit is contained in:
parent
b116630fe8
commit
6c5a8a135a
|
@ -27,6 +27,7 @@ static ogs_diam_config_t g_diam_conf;
|
|||
int __smf_log_domain;
|
||||
int __gsm_log_domain;
|
||||
|
||||
static OGS_POOL(smf_gtp_node_pool, smf_gtp_node_t);
|
||||
static OGS_POOL(smf_ue_pool, smf_ue_t);
|
||||
static OGS_POOL(smf_sess_pool, smf_sess_t);
|
||||
static OGS_POOL(smf_bearer_pool, smf_bearer_t);
|
||||
|
@ -79,6 +80,7 @@ void smf_context_init(void)
|
|||
ogs_log_install_domain(&__smf_log_domain, "smf", ogs_core()->log.level);
|
||||
ogs_log_install_domain(&__gsm_log_domain, "gsm", ogs_core()->log.level);
|
||||
|
||||
ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.gtp_node);
|
||||
ogs_pool_init(&smf_ue_pool, ogs_app()->max.ue);
|
||||
ogs_pool_init(&smf_sess_pool, ogs_app()->pool.sess);
|
||||
ogs_pool_init(&smf_bearer_pool, ogs_app()->pool.bearer);
|
||||
|
@ -132,6 +134,8 @@ void smf_context_final(void)
|
|||
ogs_gtp_node_remove(&self.sgw_s5c_list, gnode);
|
||||
}
|
||||
|
||||
ogs_pool_final(&smf_gtp_node_pool);
|
||||
|
||||
context_initialized = 0;
|
||||
}
|
||||
|
||||
|
@ -372,10 +376,11 @@ int smf_context_parse_config(void)
|
|||
const char *ctf_key = ogs_yaml_iter_key(&ctf_iter);
|
||||
ogs_assert(ctf_key);
|
||||
if (!strcmp(ctf_key, "enabled")) {
|
||||
yaml_node_t *ctf_node =
|
||||
yaml_document_get_node(document, ctf_iter.pair->value);
|
||||
yaml_node_t *ctf_node = yaml_document_get_node(
|
||||
document, ctf_iter.pair->value);
|
||||
ogs_assert(ctf_node->type == YAML_SCALAR_NODE);
|
||||
const char* enabled = ogs_yaml_iter_value(&ctf_iter);
|
||||
const char* enabled =
|
||||
ogs_yaml_iter_value(&ctf_iter);
|
||||
if (!strcmp(enabled, "auto"))
|
||||
self.ctf_config.enabled = SMF_CTF_ENABLED_AUTO;
|
||||
else if (!strcmp(enabled, "yes"))
|
||||
|
@ -383,7 +388,8 @@ int smf_context_parse_config(void)
|
|||
else if (!strcmp(enabled, "no"))
|
||||
self.ctf_config.enabled = SMF_CTF_ENABLED_NO;
|
||||
else
|
||||
ogs_warn("unknown 'enabled' value `%s`", enabled);
|
||||
ogs_warn("unknown 'enabled' value `%s`",
|
||||
enabled);
|
||||
} else
|
||||
ogs_warn("unknown key `%s`", ctf_key);
|
||||
}
|
||||
|
@ -828,6 +834,35 @@ int smf_context_parse_config(void)
|
|||
return OGS_OK;
|
||||
}
|
||||
|
||||
smf_gtp_node_t *smf_gtp_node_new(ogs_gtp_node_t *gnode)
|
||||
{
|
||||
smf_gtp_node_t *smf_gnode = NULL;
|
||||
char addr[OGS_ADDRSTRLEN];
|
||||
|
||||
ogs_pool_alloc(&smf_gtp_node_pool, &smf_gnode);
|
||||
ogs_expect_or_return_val(smf_gnode, NULL);
|
||||
memset(smf_gnode, 0, sizeof(smf_gtp_node_t));
|
||||
|
||||
addr[0] = '\0';
|
||||
ogs_assert(gnode->sa_list);
|
||||
ogs_inet_ntop(&gnode->sa_list[0].sa, addr, sizeof(addr));
|
||||
ogs_assert(smf_metrics_init_inst_gtp_node(smf_gnode->metrics, addr)
|
||||
== OGS_OK);
|
||||
|
||||
smf_gnode->gnode = gnode;
|
||||
gnode->data_ptr = smf_gnode; /* Set backpointer */
|
||||
return smf_gnode;
|
||||
}
|
||||
|
||||
void smf_gtp_node_free(smf_gtp_node_t *smf_gnode)
|
||||
{
|
||||
ogs_assert(smf_gnode);
|
||||
if (smf_gnode->gnode)
|
||||
smf_gnode->gnode->data_ptr = NULL; /* Drop backpointer */
|
||||
smf_metrics_free_inst_gtp_node(smf_gnode->metrics);
|
||||
ogs_pool_free(&smf_gtp_node_pool, smf_gnode);
|
||||
}
|
||||
|
||||
static smf_ue_t *smf_ue_add(void)
|
||||
{
|
||||
smf_ue_t *smf_ue = NULL;
|
||||
|
|
|
@ -99,6 +99,11 @@ typedef struct smf_context_s {
|
|||
ogs_list_t smf_ue_list;
|
||||
} smf_context_t;
|
||||
|
||||
typedef struct smf_gtp_node_s {
|
||||
ogs_gtp_node_t *gnode;
|
||||
ogs_metrics_inst_t *metrics[_SMF_METR_GTP_NODE_MAX];
|
||||
} smf_gtp_node_t;
|
||||
|
||||
typedef struct smf_ue_s {
|
||||
ogs_lnode_t lnode;
|
||||
|
||||
|
@ -419,6 +424,9 @@ int smf_context_parse_config(void);
|
|||
|
||||
int smf_use_gy_iface(void);
|
||||
|
||||
smf_gtp_node_t *smf_gtp_node_new(ogs_gtp_node_t *gnode);
|
||||
void smf_gtp_node_free(smf_gtp_node_t *smf_gnode);
|
||||
|
||||
smf_ue_t *smf_ue_add_by_supi(char *supi);
|
||||
smf_ue_t *smf_ue_add_by_imsi(uint8_t *imsi, int imsi_len);
|
||||
void smf_ue_remove(smf_ue_t *smf_ue);
|
||||
|
|
|
@ -41,8 +41,6 @@
|
|||
#include "s5c-build.h"
|
||||
#include "gn-build.h"
|
||||
|
||||
static OGS_POOL(smf_gtp_node_pool, smf_gtp_node_t);
|
||||
|
||||
static bool check_if_router_solicit(ogs_pkbuf_t *pkbuf);
|
||||
static void send_router_advertisement(smf_sess_t *sess, uint8_t *ip6_dst);
|
||||
|
||||
|
@ -298,8 +296,6 @@ int smf_gtp_open(void)
|
|||
ogs_gtp_self()->link_local_addr =
|
||||
ogs_link_local_addr_by_sa(ogs_gtp_self()->gtpu_addr6);
|
||||
|
||||
ogs_pool_init(&smf_gtp_node_pool, ogs_app()->pool.gtp_node);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
|
@ -312,37 +308,6 @@ void smf_gtp_close(void)
|
|||
ogs_socknode_remove_all(&ogs_gtp_self()->gtpc_list6);
|
||||
|
||||
ogs_socknode_remove_all(&ogs_gtp_self()->gtpu_list);
|
||||
|
||||
ogs_pool_final(&smf_gtp_node_pool);
|
||||
}
|
||||
|
||||
smf_gtp_node_t *smf_gtp_node_new(ogs_gtp_node_t *gnode)
|
||||
{
|
||||
smf_gtp_node_t *smf_gnode = NULL;
|
||||
char addr[OGS_ADDRSTRLEN];
|
||||
|
||||
ogs_pool_alloc(&smf_gtp_node_pool, &smf_gnode);
|
||||
ogs_expect_or_return_val(smf_gnode, NULL);
|
||||
memset(smf_gnode, 0, sizeof(smf_gtp_node_t));
|
||||
|
||||
addr[0] = '\0';
|
||||
ogs_assert(gnode->sa_list);
|
||||
ogs_inet_ntop(&gnode->sa_list[0].sa, addr, sizeof(addr));
|
||||
ogs_assert(smf_metrics_init_inst_gtp_node(smf_gnode->metrics, addr)
|
||||
== OGS_OK);
|
||||
|
||||
smf_gnode->gnode = gnode;
|
||||
gnode->data_ptr = smf_gnode; /* Set backpointer */
|
||||
return smf_gnode;
|
||||
}
|
||||
|
||||
void smf_gtp_node_free(smf_gtp_node_t *smf_gnode)
|
||||
{
|
||||
ogs_assert(smf_gnode);
|
||||
if (smf_gnode->gnode)
|
||||
smf_gnode->gnode->data_ptr = NULL; /*Drop backpointer */
|
||||
smf_metrics_free_inst_gtp_node(smf_gnode->metrics);
|
||||
ogs_pool_free(&smf_gtp_node_pool, smf_gnode);
|
||||
}
|
||||
|
||||
int smf_gtp1_send_create_pdp_context_response(
|
||||
|
|
|
@ -29,15 +29,6 @@ extern "C" {
|
|||
int smf_gtp_open(void);
|
||||
void smf_gtp_close(void);
|
||||
|
||||
typedef struct smf_gtp_node_s {
|
||||
ogs_gtp_node_t *gnode;
|
||||
ogs_metrics_inst_t *metrics[_SMF_METR_GTP_NODE_MAX];
|
||||
} smf_gtp_node_t;
|
||||
|
||||
smf_gtp_node_t *smf_gtp_node_new(ogs_gtp_node_t *gnode);
|
||||
void smf_gtp_node_free(smf_gtp_node_t *smf_gnode);
|
||||
|
||||
|
||||
int smf_gtp1_send_create_pdp_context_response(
|
||||
smf_sess_t *sess, ogs_gtp_xact_t *xact);
|
||||
int smf_gtp1_send_delete_pdp_context_response(
|
||||
|
|
Loading…
Reference in New Issue