summaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/lwip_src/common/stackx_app_res.c
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/lwip_src/common/stackx_app_res.c')
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_app_res.c972
1 files changed, 0 insertions, 972 deletions
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_app_res.c b/stacks/lwip_stack/lwip_src/common/stackx_app_res.c
deleted file mode 100644
index 5c30271..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_app_res.c
+++ /dev/null
@@ -1,972 +0,0 @@
-/*
-*
-* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at:
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#include "stackx_app_res.h"
-#include "nstack_securec.h"
-#include "common_pal_bitwide_adjust.h"
-#include "nstack_log.h"
-#include "stackx_common.h"
-#include "nsfw_maintain_api.h"
-#include "stackx_tx_box.h"
-#include "nsfw_msg_api.h"
-#include "nsfw_recycle_api.h"
-#include "common_mem_mbuf.h"
-#include "stackx_pbuf.h"
-#include "nsfw_mt_config.h"
-#include "nsfw_mem_api.h"
-#include "spl_opt.h"
-#define SPL_MAX_MSG_NUM (MBOX_RING_SIZE*8*MAX_THREAD_NUM)
-
-spl_app_res_group *g_spl_app_res_group = NULL;
-
-spl_app_res_group_array *g_res_group_array = NULL;
-
-#ifdef SYS_MEM_RES_STAT
-mpool_handle g_app_tx_pool[SBR_TX_POOL_NUM];
-#endif
-
-/***************************************************
-* description:
-***************************************************/
-int
-spl_init_group_array ()
-{
- g_res_group_array =
- (spl_app_res_group_array *) sbr_create_mzone (SPL_RES_GROUP_ARRAY,
- sizeof
- (spl_app_res_group_array));
- if (!g_res_group_array)
- {
- NSPOL_LOGERR ("create g_res_group_array failed");
- return -1;
- }
-
- u32 i;
- for (i = 0; i < SBR_TX_POOL_NUM; ++i)
- {
- g_res_group_array->pid_array[i] = 0;
- }
-
- for (i = 0; i < MAX_THREAD_NUM; ++i)
- {
- g_res_group_array->res_group[i] = NULL;
- }
-
- g_res_group_array->thread_num = 0;
- return 0;
-}
-
-/***************************************************
-* description:
-***************************************************/
-int
-sbr_attach_group_array ()
-{
- g_res_group_array =
- (spl_app_res_group_array *) sbr_lookup_mzone (SPL_RES_GROUP_ARRAY);
- if (!g_res_group_array)
- {
- NSPOL_LOGERR ("attach g_res_group_array failed");
- return -1;
- }
-
- return 0;
-}
-
-/***************************************************
-* description:
-***************************************************/
-int
-spl_add_instance_res_group (u32 thread_index, spl_app_res_group * group)
-{
- if (thread_index >= MAX_THREAD_NUM)
- {
- NSPOL_LOGERR
- ("thread_index >= MAX_THREAD_NUM]thread_index=%u, MAX_THREAD_NUM=%u",
- thread_index, MAX_THREAD_NUM);
- return -1;
- }
-
- if (g_res_group_array->res_group[thread_index] != NULL)
- {
- NSPOL_LOGERR
- ("g_res_group_array in thread_index is not NULL, this can not happen");
- return -1;
- }
-
- g_res_group_array->res_group[thread_index] = group;
- __sync_add_and_fetch (&g_res_group_array->thread_num, 1);
- return 0;
-}
-
-/***************************************************
-* description:
-***************************************************/
-int
-spl_add_mbox (mring_handle mbox_array[], u32 array_size)
-{
- if (array_size != SPL_MSG_BOX_NUM)
- {
- NSPOL_LOGERR ("array_size must be %u, but not", SPL_MSG_BOX_NUM);
- return -1;
- }
-
- u32 i;
- for (i = 0; i < array_size; ++i)
- {
- g_spl_app_res_group->mbox_array[i] = mbox_array[i];
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : spl_create_group
-* Description : create group
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-spl_app_res_group *
-spl_create_group ()
-{
- spl_app_res_group *group =
- (spl_app_res_group *) sbr_create_mzone (SPL_APP_RES_GROUP_NAME,
- sizeof (spl_app_res_group));
- if (!group)
- {
- NSPOL_LOGERR ("Create app_res_group zone fail]name=%s, size=%u",
- SPL_APP_RES_GROUP_NAME, sizeof (spl_app_res_group));
- return NULL;
- }
-
- group->msg_pool = NULL;
- group->conn_pool = NULL;
- group->conn_array = NULL;
- group->recv_ring_pool = NULL;
-
- u32 i;
- for (i = 0; i < SBR_TX_POOL_NUM; ++i)
- {
- group->tx_pool_array[i] = NULL;
- }
-
- for (i = 0; i < SPL_MSG_BOX_NUM; ++i)
- {
- group->mbox_array[i] = NULL;
- }
-
- group->extend_member_bit = 0;
-
- NSPOL_LOGINF (SC_DPDK_INFO, "Create app_res_group zone ok]name=%s, size=%u",
- SPL_APP_RES_GROUP_NAME, sizeof (spl_app_res_group));
- MEM_STAT (SPL_APP_RES, SPL_APP_RES_GROUP_NAME, NSFW_SHMEM,
- sizeof (spl_app_res_group));
- return group;
-}
-
-/*****************************************************************************
-* Prototype : _spl_create_ring_pool
-* Description : create ring pool
-* Input : char* pool_name
-* char* array_name
-* nsfw_mpool_type type
-* Output : None
-* Return Value : static inline mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline mring_handle
-_spl_create_ring_pool (char *pool_name, char *array_name,
- nsfw_mpool_type type, u32 num, u32 ring_size)
-{
- mring_handle pool = sbr_create_ring (pool_name, num - 1);
-
- if (!pool)
- {
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "Create ring pool ok]name=%s, num=%u, size=%d",
- pool_name, num, nsfw_mem_get_len (pool, NSFW_MEM_RING));
- MEM_STAT (SPL_APP_RES, pool_name, NSFW_SHMEM,
- nsfw_mem_get_len (pool, NSFW_MEM_RING));
-
- mring_handle *array = malloc (num * sizeof (mring_handle));
- if (!array)
- {
- NSPOL_LOGERR ("malloc fail]size=%u", num * sizeof (mring_handle));
- return NULL;
- }
-
- if (sbr_create_multi_ring (array_name, ring_size - 1, num,
- array, type) != 0)
- {
- free (array);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "Create multi rings ok]name=%s, ring_size=%u, ring_num=%u, total_mem=%d",
- array_name, ring_size, num,
- (nsfw_mem_get_len (array[0], NSFW_MEM_RING) * num));
- MEM_STAT (SPL_APP_RES, array_name, NSFW_SHMEM,
- nsfw_mem_get_len (array[0], NSFW_MEM_RING) * num);
-
- unsigned int i = 0;
- while (i < num)
- {
- if (nsfw_mem_ring_enqueue (pool, (void *) array[i]) != 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- free (array);
- return NULL;
- }
-
- i++;
- }
-
- free (array);
- return pool;
-}
-
-/*****************************************************************************
-* Prototype : spl_create_ring_pool
-* Description : create ring pool
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_create_ring_pool (spl_app_res_group * group)
-{
- group->recv_ring_pool =
- _spl_create_ring_pool (SPL_RECV_RING_POOL_NAME, SPL_RECV_RING_ARRAY_NAME,
- NSFW_MRING_SPSC, CUR_CFG_SOCKET_NUM,
- SPL_MAX_RING_SIZE);
- if (!group->recv_ring_pool)
- {
- NSPOL_LOGERR ("Create recv ring pool failed");
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "Create recv ring pool ok]name=%s",
- SPL_RECV_RING_POOL_NAME);
- return 0;
-}
-
-int
-spl_force_netconn_free (void *data)
-{
- spl_netconn_t *conn = (spl_netconn_t *) data;
- if (TRUE == conn->res_chk.alloc_flag)
- {
- if (NULL != conn->recycle.accept_from)
- {
- return FALSE;
- }
-
- if (TRUE != nsfw_pidinfo_empty (&conn->recycle.pid_info))
- {
- return FALSE;
- }
- }
- ss_reset_conn (conn);
- (void) res_free (&conn->res_chk);
-
- if (nsfw_mem_ring_enqueue (ss_get_conn_pool (conn), (void *) conn) != 1)
- {
- NSSBR_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- }
- NSFW_LOGINF ("force free conn]conn=%p", conn);
- return TRUE;
-}
-
-/*****************************************************************************
-* Prototype : spl_create_netconn_pool
-* Description : create netconn pool
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_create_netconn_pool (spl_app_res_group * group)
-{
- spl_netconn_t **conn_array =
- (spl_netconn_t **) sbr_create_mzone (SPL_CONN_ARRAY_NAME,
- sizeof (spl_netconn_t *) *
- CUR_CFG_SOCKET_NUM);
-
- if (!conn_array)
- {
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "Create connn_array zone ok]name=%s, size=%zu",
- SPL_CONN_ARRAY_NAME,
- sizeof (spl_netconn_t *) * CUR_CFG_SOCKET_NUM);
- mring_handle pool =
- sbr_create_pool (SPL_CONN_POOL_NAME, CUR_CFG_SOCKET_NUM - 1,
- SBR_FD_NETCONN_SIZE);
-
- if (!pool)
- {
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "Create conn_pool ok]name=%s, num=%u, total_mem=%d",
- SPL_CONN_POOL_NAME, CUR_CFG_SOCKET_NUM,
- nsfw_mem_get_len (pool, NSFW_MEM_SPOOL));
-
- sbr_recycle_group *recycle_group =
- (sbr_recycle_group *) sbr_create_mzone (SPL_RECYCLE_GROUP,
- sizeof (sbr_recycle_group));
- if (!recycle_group)
- {
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "Create recycle_group zone ok]name=%s, size=%u",
- SPL_RECYCLE_GROUP, sizeof (sbr_recycle_group));
-
- recycle_group->conn_array = conn_array;
- recycle_group->conn_num = spl_get_conn_num ();
- recycle_group->conn_pool = pool;
- recycle_group->extend_member_bit = 0;
- recycle_group->msg_pool = group->msg_pool;
-
- spl_netconn_t *conn = NULL;
- unsigned int i = 0;
- while (i < CUR_CFG_SOCKET_NUM)
- {
- if (nsfw_mem_ring_dequeue (pool, (void **) &conn) != 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_dequeue failed,this can not happen");
- return -1;
- }
-
- ss_reset_conn (conn);
- conn->recycle.group = recycle_group;
-
- if (nsfw_mem_ring_dequeue (group->recv_ring_pool, &conn->recv_ring) !=
- 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_dequeue failed,this can not happen");
- return -1;
- }
-
- conn_array[i] = conn;
-
- if (nsfw_mem_ring_enqueue (pool, (void *) conn) != 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- return -1;
- }
-
- i++;
- }
-
- group->conn_pool = pool;
- group->conn_array = conn_array;
-
- MEM_STAT (SPL_APP_RES, SPL_RECYCLE_GROUP, NSFW_SHMEM,
- sizeof (sbr_recycle_group));
- MEM_STAT (SPL_APP_RES, SPL_CONN_ARRAY_NAME, NSFW_SHMEM,
- sizeof (spl_netconn_t *) * CUR_CFG_SOCKET_NUM);
- MEM_STAT (SPL_APP_RES, SPL_CONN_POOL_NAME, NSFW_SHMEM,
- nsfw_mem_get_len (group->conn_pool, NSFW_MEM_SPOOL));
- return 0;
-}
-
-int
-spl_force_msg_free (void *data)
-{
- data_com_msg *m = (data_com_msg *) data;
- if (NULL == m)
- {
- return FALSE;
- }
-
- NSFW_LOGINF ("force free msg]msg=%p", data);
- (void) res_free (&m->param.res_chk);
- m->param.recycle_pid = 0;
- if (nsfw_mem_ring_enqueue (m->param.msg_from, (void *) m) != 1)
- {
- NSFW_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- }
- return TRUE;
-}
-
-/*****************************************************************************
-* Prototype : spl_create_msg_pool
-* Description : create msg pool
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_create_msg_pool (spl_app_res_group * group)
-{
- mring_handle pool =
- sbr_create_pool (SPL_MSG_POOL_NAME, SPL_MAX_MSG_NUM - 1, MAX_MSG_SIZE);
-
- if (!pool)
- {
- return -1;
- }
-
- data_com_msg *m = NULL;
- unsigned int i = 0;
- while (i < SPL_MAX_MSG_NUM)
- {
- if (nsfw_mem_ring_dequeue (pool, (void **) &m) != 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_dequeue failed,this can not happen");
- return -1;
- }
-
- m->param.msg_from = pool;
- m->param.recycle_pid = 0;
- sys_sem_init (&m->param.op_completed);
-
- if (nsfw_mem_ring_enqueue (pool, (void *) m) != 1)
- {
- NSPOL_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- return -1;
- }
-
- i++;
- }
-
- group->msg_pool = pool;
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "Create app msg pool ok]name=%s, num=%u, size=%u, total_mem=%d",
- SPL_MSG_POOL_NAME, SPL_MAX_MSG_NUM, MAX_MSG_SIZE,
- nsfw_mem_get_len (group->msg_pool, NSFW_MEM_SPOOL));
- MEM_STAT (SPL_APP_RES, SPL_MSG_POOL_NAME, NSFW_SHMEM,
- nsfw_mem_get_len (group->msg_pool, NSFW_MEM_SPOOL));
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : spl_regist_recycle
-* Description : regist recycle
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_regist_recycle (spl_app_res_group * group)
-{
- void *ret =
- nsfw_recycle_reg_obj (NSFW_REC_PRO_DEFAULT, NSFW_REC_SBR_SOCKET, NULL);
-
- if (!ret)
- {
- NSSBR_LOGERR ("failed");
- return -1;
- }
-
- if (NULL == group)
- {
- NSSBR_LOGERR ("g_spl_app_res_group null");
- return -1;
- }
-
- nsfw_res_scn_cfg scn_cfg = { NSFW_RES_SCAN_SPOOL, 90, 3, 16,
- CUR_CFG_SOCKET_NUM / 128, CUR_CFG_SOCKET_NUM - 1,
- SBR_FD_NETCONN_SIZE,
- offsetof (spl_netconn_t, res_chk),
- (void *) group->conn_pool,
- (void *) group->conn_pool,
- spl_force_netconn_free
- };
-
- (void) nsfw_res_mgr_reg (&scn_cfg);
-
- nsfw_res_scn_cfg scn_cfg_msg = { NSFW_RES_SCAN_SPOOL, 60, 3, 16,
- SPL_MAX_MSG_NUM / 128, SPL_MAX_MSG_NUM,
- MAX_MSG_SIZE,
- offsetof (data_com_msg, param.res_chk),
- (void *) group->msg_pool,
- (void *) group->msg_pool,
- spl_force_msg_free
- };
- (void) nsfw_res_mgr_reg (&scn_cfg_msg);
-
- return 0;
-}
-
-void
-spl_reg_tx_pool_mgr (mpool_handle pool_array[], u32 num)
-{
- u32 loop;
- for (loop = 0; loop < num; loop++)
- {
- (void) spl_reg_res_txrx_mgr (pool_array[loop]); // will only return 0, no need to check return value
- }
-
- return;
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_tx_pool
-* Description : create tx pool,spl call this fun
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_create_tx_pool (mpool_handle pool_array[], u32 array_size)
-{
- data_com_msg *tx_msg_array =
- (data_com_msg *) sbr_create_mzone (SBR_TX_MSG_ARRAY_NAME,
- (size_t) sizeof (data_com_msg) *
- SBR_TX_MSG_NUM);
-
- if (!tx_msg_array)
- {
- NSSBR_LOGERR ("Create tx_msg_array zone fail]name=%s, num=%u, size=%u",
- SBR_TX_MSG_ARRAY_NAME, SBR_TX_MSG_NUM,
- (size_t) sizeof (data_com_msg) * SBR_TX_MSG_NUM);
- return -1;
- }
-
- MEM_STAT (SBR_TX_POOL_NAME, SBR_TX_MSG_ARRAY_NAME, NSFW_SHMEM,
- (size_t) sizeof (data_com_msg) * SBR_TX_MSG_NUM);
- NSSBR_LOGINF
- ("Create tx_msg_array zone ok]name=%s, ptr=%p, num=%u, size=%u",
- SBR_TX_MSG_ARRAY_NAME, tx_msg_array, SBR_TX_MSG_NUM,
- sizeof (data_com_msg) * SBR_TX_MSG_NUM);
-
- mpool_handle mp;
- int ret;
- char tx_pool_name[64];
- u32 loop;
- for (loop = 0; loop < array_size; loop++)
- {
- ret =
- SPRINTF_S (tx_pool_name, sizeof (tx_pool_name), "%s_%d",
- SBR_TX_POOL_NAME, loop);
- if (-1 == ret)
- {
- NSSBR_LOGERR ("SPRINTF_S failed]ret=%d", ret);
- return -1;
- }
-
- nsfw_mem_mbfpool pool_param;
- if (STRCPY_S
- (pool_param.stname.aname, NSFW_MEM_NAME_LENTH, tx_pool_name) != 0)
- {
- NSSBR_LOGERR ("STRCPY_S failed]name=%s", tx_pool_name);
- return -1;
- }
-
- pool_param.isocket_id = -1;
- pool_param.stname.entype = NSFW_SHMEM;
- pool_param.enmptype = NSFW_MRING_MPMC;
- pool_param.uscash_size = 0;
- pool_param.uspriv_size = 0;
- pool_param.usdata_room = TX_MBUF_MAX_LEN;
- pool_param.usnum = SBR_TX_POOL_MBUF_NUM - 1;
-
- mp = nsfw_mem_mbfmp_create (&pool_param);
- if (!mp)
- {
- NSSBR_LOGERR ("Create tx_mbuf_pool fail]name=%s, num=%u, room=%u",
- tx_pool_name, SBR_TX_POOL_MBUF_NUM,
- pool_param.usdata_room);
- return -1;
- }
- else
- {
- struct common_mem_mbuf *mbuf = NULL;
- struct spl_pbuf *buf = NULL;
- int i = 0;
- while (i < (int) SBR_TX_POOL_MBUF_NUM)
- {
- mbuf = nsfw_mem_mbf_alloc (mp, NSFW_SHMEM);
- if (!mbuf)
- {
- NSSBR_LOGERR
- ("nsfw_mem_mbf_alloc failed,this can not happen");
- return -1;
- }
-
- buf =
- (struct spl_pbuf *) ((char *) mbuf +
- sizeof (struct common_mem_mbuf));
- int idx = loop * (int) SBR_TX_POOL_MBUF_NUM + i;
- sys_sem_init (&tx_msg_array[idx].param.op_completed);
- tx_msg_array[idx].param.msg_from = NULL;
- buf->msg = (void *) &tx_msg_array[idx];
- (void) res_free (&buf->res_chk); //no need to check return value, as it will do free operation depends on alloc_flag
-
- if (nsfw_mem_mbf_free (mbuf, NSFW_SHMEM) < 0)
- {
- NSSBR_LOGERR
- ("nsfw_mem_mbf_free failed,this can not happen");
- return -1;
- }
-
- i++;
- }
-
- pool_array[loop] = mp;
-#ifdef SYS_MEM_RES_STAT
- g_app_tx_pool[loop] = mp;
-#endif
- }
- }
-
- spl_reg_tx_pool_mgr (pool_array, array_size);
-
- NSSBR_LOGINF ("Create all tx_mbuf_pool ok]pool_num=%d, total_mem=%d",
- array_size, nsfw_mem_get_len (pool_array[0],
- NSFW_MEM_MBUF) * array_size);
- MEM_STAT (SBR_TX_POOL_NAME, SBR_TX_POOL_NAME, NSFW_SHMEM,
- nsfw_mem_get_len (pool_array[0], NSFW_MEM_MBUF) * array_size);
- return 0;
-}
-
-spl_app_res_group *
-spl_create_res_group ()
-{
- spl_app_res_group *group = spl_create_group ();
- if (NULL == group)
- {
- NSPOL_LOGERR ("spl_create_group failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_create_group ok");
-
- if (spl_create_ring_pool (group) != 0)
- {
- NSPOL_LOGERR ("spl_create_ring_pool failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_create_ring_pool ok");
-
- if (spl_create_msg_pool (group) != 0)
- {
- NSPOL_LOGERR ("spl_create_msg_pool failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_create_msg_pool ok");
-
- if (spl_create_netconn_pool (group) != 0)
- {
- NSPOL_LOGERR ("spl_create_netconn_pool failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_create_netconn_pool ok");
-
- if (spl_regist_recycle (group) != 0)
- {
- NSPOL_LOGERR ("spl_regist_recycle failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_regist_recycle ok");
-
- if (spl_create_tx_pool (group->tx_pool_array, SBR_TX_POOL_NUM) != 0)
- {
- NSPOL_LOGERR ("spl_create_tx_pool failed");
- return NULL;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "spl_create_tx_pool ok");
-
- return group;
-}
-
-/*****************************************************************************
-* Prototype : spl_init_app_res
-* Description : init app res
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-spl_init_app_res ()
-{
- g_spl_app_res_group = spl_create_res_group ();
- if (NULL == g_spl_app_res_group)
- {
- NSPOL_LOGERR ("spl_create_group failed");
- return -1;
- }
-
- return spl_add_instance_res_group (0, g_spl_app_res_group);
-}
-
-/*****************************************************************************
-* Prototype : spl_get_conn_array
-* Description : get conn array
-* Input : u32 pid
-* Output : None
-* Return Value : spl_netconn_t**
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-spl_netconn_t **
-spl_get_conn_array (u32 pid)
-{
- return (spl_netconn_t **) ADDR_SHTOL (g_spl_app_res_group->conn_array);
-}
-
-/*****************************************************************************
-* Prototype : spl_get_conn_pool
-* Description : get conn pool
-* Input : None
-* Output : None
-* Return Value : mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mring_handle
-spl_get_conn_pool ()
-{
- return (mring_handle) ADDR_SHTOL (g_spl_app_res_group->conn_pool);
-}
-
-/*****************************************************************************
-* Prototype : spl_get_msg_pool
-* Description : get msg pool
-* Input : None
-* Output : None
-* Return Value : mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mring_handle
-spl_get_msg_pool ()
-{
- return (mring_handle) ADDR_SHTOL (g_spl_app_res_group->msg_pool);
-}
-
-/*****************************************************************************
-* Prototype : spl_recycle_msg
-* Description : recycle msg
-* Input : void *data
-* void* argv
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-spl_recycle_msg (void *data, void *argv)
-{
- if (!data)
- {
- NSPOL_LOGERR ("data is NULL]data=%p,pid=%p", data, argv);
- return -1;
- }
-
- data_com_msg *m = (data_com_msg *) data;
- u64 pid_64 = (u64) argv;
- u32 pid = (u32) pid_64;
- if (pid == m->param.recycle_pid)
- {
- ASYNC_MSG_FREE (m);
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : spl_recycle_msg_pool
-* Description : recycle msg pool
-* Input : u32 pid
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-spl_recycle_msg_pool (u32 pid)
-{
- mring_handle msg_pool = spl_get_msg_pool ();
- if (!msg_pool)
- {
- NSPOL_LOGERR ("msg_pool is NULL,this can not happen]pid=%u", pid);
- return;
- }
-
- u64 pid_64 = pid;
- (void) nsfw_mem_sp_iterator (msg_pool, 0, SPL_MAX_MSG_NUM, spl_recycle_msg,
- (void *) pid_64);
-}
-
-/*****************************************************************************
-* Prototype : spl_get_conn_num
-* Description : get conn num
-* Input : None
-* Output : None
-* Return Value : u32
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-u32
-spl_get_conn_num ()
-{
- return CUR_CFG_SOCKET_NUM;
-}
-
-/***************************************************
-* description:
-***************************************************/
-int
-sbr_malloc_tx_pool (u32 pid, mpool_handle pool[], u32 pool_num)
-{
- int loop;
- for (loop = 0; loop < SBR_TX_POOL_NUM; loop++)
- {
- if ((0 == g_res_group_array->pid_array[loop])
- &&
- __sync_bool_compare_and_swap (&g_res_group_array->pid_array[loop],
- 0, pid))
- {
- u32 i;
- for (i = 0; i < g_res_group_array->thread_num && i < pool_num; ++i)
- {
- spl_app_res_group *group =
- (spl_app_res_group *)
- ADDR_SHTOL (g_res_group_array->res_group[i]);
- pool[i] = ADDR_SHTOL (group->tx_pool_array[loop]);
- }
-
- NSSBR_LOGINF ("get tx pool]pid=%d,loop=%d.", pid, loop);
- return 0;
- }
- }
-
- for (loop = 0; loop < SBR_TX_POOL_NUM; loop++)
- {
- NSSBR_LOGERR ("no free pool]loop=%d,pid=%d", loop,
- g_res_group_array->pid_array[loop]);
- }
-
- return -1;
-}
-
-/***************************************************
-* description:
-***************************************************/
-void
-spl_free_tx_pool (u32 pid)
-{
- int loop;
- for (loop = 0; loop < SBR_TX_POOL_NUM; loop++)
- {
- if (pid == g_res_group_array->pid_array[loop])
- {
- u32 i;
- for (i = 0; i < g_res_group_array->thread_num; ++i)
- {
- (void)
- nsfw_mem_mbuf_pool_recycle (g_res_group_array->res_group
- [i]->tx_pool_array[loop]);
- }
-
- if (!__sync_bool_compare_and_swap
- (&g_res_group_array->pid_array[loop], pid, 0))
- {
- NSSBR_LOGERR ("free tx_pool failed]loop=%d,pid=%d", loop, pid);
- }
- else
- {
- NSSBR_LOGDBG ("free tx_pool ok]loop=%d,pid=%d", loop, pid);
- }
-
- break;
- }
- }
-}
-
-/***************************************************
-* description:
-***************************************************/
-mring_handle
-sbr_get_instance_conn_pool (u32 thread_index)
-{
- if (thread_index >= g_res_group_array->thread_num)
- {
- return NULL;
- }
-
- spl_app_res_group *group =
- (spl_app_res_group *)
- ADDR_SHTOL (g_res_group_array->res_group[thread_index]);
- return ADDR_SHTOL (group->conn_pool);
-}
-
-/***************************************************
-* description:
-***************************************************/
-mring_handle *
-ss_get_instance_msg_box (u16 thread_index, u16 idx)
-{
- if (thread_index >= g_res_group_array->thread_num)
- {
- thread_index = 0;
- }
-
- if (idx >= SPL_MSG_BOX_NUM)
- {
- idx = 0;
- }
-
- spl_app_res_group *group =
- (spl_app_res_group *)
- ADDR_SHTOL (g_res_group_array->res_group[thread_index]);
- return ADDR_SHTOL (group->mbox_array[idx]);
-}