summaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c')
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c332
1 files changed, 0 insertions, 332 deletions
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c b/stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c
deleted file mode 100644
index b6580ed..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c
+++ /dev/null
@@ -1,332 +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 <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <arpa/inet.h>
-#include "stackx_cfg.h"
-#include "json.h"
-#include "nstack_log.h"
-#include "spl_def.h"
-#include "nstack_securec.h"
-#include "stackx_ip_addr.h"
-
-sbr_container_ip_group g_container_ip_group;
-
-/*****************************************************************************
-* Prototype : sbr_parse_container_ip_json
-* Description : parse port json
-* Input : char* param
-* Output : None
-* Return Value : static void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static void
-sbr_parse_container_ip_json (char *param)
-{
- int retval;
- struct json_object *obj = json_tokener_parse (param);
- struct json_object *container_id_obj = NULL;
- struct json_object *ports_list_obj = NULL;
- struct json_object *ip_cidr_list_obj = NULL;
-
- if (!obj)
- {
- NSSBR_LOGERR ("json_tokener_parse failed");
- return;
- }
-
- json_object_object_get_ex (obj, "containerID", &container_id_obj);
- if (!container_id_obj)
- {
- NSSBR_LOGERR ("can't get containerID");
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (obj, "ports_list", &ports_list_obj);
- if (ports_list_obj)
- {
- int i;
- int port_num = json_object_array_length (ports_list_obj);
-
- if (0 == port_num)
- {
- NSSBR_LOGERR ("port num is 0");
- goto RETURN_ERROR;
- }
-
- for (i = 0; i < port_num; i++)
- {
- struct json_object *port_obj =
- json_object_array_get_idx (ports_list_obj, i);
- json_object_object_get_ex (port_obj, "ip_cidr", &ip_cidr_list_obj);
- if (ip_cidr_list_obj)
- {
- int j;
- int ip_cidr_num = json_object_array_length (ip_cidr_list_obj);
- for (j = 0; j < ip_cidr_num; ++j)
- {
- struct json_object *ip_cidr_obj =
- json_object_array_get_idx (ip_cidr_list_obj, j);
- if (ip_cidr_obj)
- {
- char tmp[32] = { 0 };
- const char *ip_cidr =
- json_object_get_string (ip_cidr_obj);
- if ((NULL == ip_cidr) || (ip_cidr[0] == 0))
- {
- NSSBR_LOGERR ("ip is empty");
- goto RETURN_ERROR;
- }
-
- const char *sub = strstr (ip_cidr, "/");
- if ((NULL == sub)
- || (sizeof (tmp) - 1 <
- (unsigned int) (sub - ip_cidr))
- || (strlen (sub) > sizeof (tmp) - 1))
- {
- NSSBR_LOGERR ("ip format is not ok");
- goto RETURN_ERROR;
- }
-
- retval =
- STRNCPY_S (tmp, sizeof (tmp), ip_cidr,
- (size_t) (sub - ip_cidr));
- if (EOK != retval)
- {
- NSSBR_LOGERR ("STRNCPY_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
-
- struct in_addr addr;
- retval =
- MEMSET_S (&addr, sizeof (addr), 0, sizeof (addr));
- if (EOK != retval)
- {
- NSSBR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
-
- retval = spl_inet_aton (tmp, &addr);
- if (0 == retval)
- {
- NSSBR_LOGERR ("spl_inet_aton failed]ret=%d",
- retval);
- goto RETURN_ERROR;
- }
-
- g_container_ip_group.
- ip_array[g_container_ip_group.ip_num].ip =
- addr.s_addr;
- int mask_len = atoi (sub + 1);
- if ((mask_len <= 0) || (mask_len > 32))
- {
- NSSBR_LOGERR ("mask len is not ok");
- goto RETURN_ERROR;
- }
-
- g_container_ip_group.
- ip_array[g_container_ip_group.ip_num].mask_len =
- (u32) mask_len;
- g_container_ip_group.ip_num++;
-
- if (g_container_ip_group.ip_num >=
- SBR_MAX_CONTAINER_IP_NUM)
- {
- NSSBR_LOGWAR ("container ip num is full]ip_num=%u",
- g_container_ip_group.ip_num);
- goto RETURN_OK;
- }
- }
- }
- }
- }
- }
- else
- {
- NSSBR_LOGERR ("can't get ports_list");
- goto RETURN_ERROR;
- }
-
-RETURN_OK:
- json_object_put (obj);
- NSSBR_LOGINF ("container ip num is %u", g_container_ip_group.ip_num);
- u32 idx;
- for (idx = 0; idx < g_container_ip_group.ip_num; ++idx)
- {
- NSSBR_LOGDBG ("container ip=0x%08x",
- g_container_ip_group.ip_array[idx].ip);
- }
- return;
-
-RETURN_ERROR:
- json_object_put (obj);
- if (MEMSET_S
- (&g_container_ip_group, sizeof (sbr_container_ip_group), 0,
- sizeof (sbr_container_ip_group)) != EOK)
- {
- NSSBR_LOGERR ("MEMSET_S failed");
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_get_cfg_path
-* Description : get cfg path
-* Input : None
-* Output : None
-* Return Value : NSTACK_STATIC const char*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC const char *
-sbr_get_cfg_path ()
-{
- static char cfg_file[SBR_MAX_CFG_PATH_LEN] = "/canal/output/portinfo.json";
- return cfg_file;
-}
-
-/*****************************************************************************
-* Prototype : sbr_init_cfg
-* Description : init cfg from file
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_init_cfg ()
-{
- int ret;
- off_t file_len = 0;
- off_t buff_len = 0;
- char *buff = NULL;
- const char *cfg_file = sbr_get_cfg_path (); /* no need check ret */
-
- int fp = open (cfg_file, O_RDONLY);
-
- if (fp < 0)
- {
- NSSBR_LOGWAR ("failed to open file]file name=%s", cfg_file);
- goto RETURN_ERROR;
- }
-
- file_len = lseek (fp, 0, SEEK_END);
- if (file_len <= 0)
- {
- NSSBR_LOGWAR ("failed to get file len]file name=%s", cfg_file);
- goto RETURN_ERROR;
- }
-
- if (file_len > SBR_MAX_CFG_FILE_SIZE)
- {
- NSSBR_LOGWAR
- ("file len is too big]file len=%d, max len=%d, file name=%s",
- file_len, SBR_MAX_CFG_FILE_SIZE, cfg_file);
- goto RETURN_ERROR;
- }
-
- ret = lseek (fp, 0, SEEK_SET);
- if (ret < 0)
- {
- NSSBR_LOGWAR ("seek to start failed]file name=%s", cfg_file);
- goto RETURN_ERROR;
- }
-
- buff_len = file_len + 1;
- buff = (char *) malloc (buff_len);
- if (!buff)
- {
- NSSBR_LOGWAR ("malloc buff failed]buff_len=%d", buff_len);
- goto RETURN_ERROR;
- }
-
- ret = MEMSET_S (buff, buff_len, 0, buff_len);
- if (EOK != ret)
- {
- NSSBR_LOGWAR ("MEMSET_S failed]ret=%d.", ret);
- goto RETURN_ERROR;
- }
-
- ret = read (fp, buff, buff_len - 1);
- if (ret <= 0)
- {
- NSSBR_LOGWAR ("read failed]ret=%d", ret);
- goto RETURN_ERROR;
- }
-
- sbr_parse_container_ip_json (buff);
- close (fp);
- free (buff);
- return 0;
-
-RETURN_ERROR:
- if (fp >= 0)
- {
- close (fp);
- }
-
- if (buff)
- {
- free (buff);
- }
-
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_get_src_ip
-* Description : get src ip from cfg
-* Input : u32 dst_ip
-* u32* src_ip
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_get_src_ip (u32 dst_ip, u32 * src_ip)
-{
- if (!src_ip)
- {
- NSSBR_LOGERR ("src_ip is NULL");
- return -1;
- }
-
- u32 i;
- for (i = 0; i < g_container_ip_group.ip_num; ++i)
- {
- unsigned int mask = ~0;
- mask = (mask << (32 - g_container_ip_group.ip_array[i].mask_len));
- mask = htonl (mask);
- if ((dst_ip & mask) == (g_container_ip_group.ip_array[i].ip & mask))
- {
- *src_ip = g_container_ip_group.ip_array[i].ip;
- NSSBR_LOGDBG ("find src ip]container_ip=0x%08x,dest_ip=0x%08x",
- *src_ip, dst_ip);
- return 0;
- }
- }
-
- NSSBR_LOGDBG ("can't find src ip]dest_ip=0x%08x", dst_ip);
- return -1;
-}