summaryrefslogtreecommitdiffstats
path: root/stacks
diff options
context:
space:
mode:
Diffstat (limited to 'stacks')
-rw-r--r--stacks/lwip_stack/CMakeLists.txt111
-rw-r--r--stacks/lwip_stack/configure/module_config.json17
-rw-r--r--stacks/lwip_stack/configure/nStackConfig.json32
-rw-r--r--stacks/lwip_stack/configure/rd_config.json26
-rw-r--r--stacks/lwip_stack/doc/README.md125
-rw-r--r--stacks/lwip_stack/doc/dmm_lwip.pngbin52940 -> 0 bytes
-rw-r--r--stacks/lwip_stack/lwip_src/CMakeLists.txt98
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_api.c51
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_api_msg.c3329
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_netbuf.c58
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_netifapi.c288
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_sbr.c495
-rw-r--r--stacks/lwip_stack/lwip_src/api/spl_tcpip.c1547
-rw-r--r--stacks/lwip_stack/lwip_src/common/rb_tree.c393
-rw-r--r--stacks/lwip_stack/lwip_src/common/rb_tree.h112
-rw-r--r--stacks/lwip_stack/lwip_src/common/spl_def.h142
-rw-r--r--stacks/lwip_stack/lwip_src/common/spl_opt.h329
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_app_res.c972
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_app_res.h103
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_common.c357
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_common.h44
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_common_opt.h147
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_debug.h70
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_err.h68
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_ip_addr.c280
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_ip_addr.h82
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_ip_tos.h146
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_netbuf.h43
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_pbuf.c223
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_pbuf.h82
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_pbuf_comm.h109
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_spl_msg.h241
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_spl_share.c198
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_spl_share.h490
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_tcp_opt.h42
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_tx_box.c64
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_tx_box.h39
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackx_types.h68
-rw-r--r--stacks/lwip_stack/lwip_src/common/stackxopts.h53
-rw-r--r--stacks/lwip_stack/lwip_src/core/global_tick.c48
-rw-r--r--stacks/lwip_stack/lwip_src/core/spl_pbuf.c611
-rw-r--r--stacks/lwip_stack/lwip_src/core/spl_timers.c607
-rw-r--r--stacks/lwip_stack/lwip_src/core/unmatch_version.c59
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/config_common.h64
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/configuration_reader.h26
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/container_ip.h39
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/ip_module_api.h223
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/network.h36
-rw-r--r--stacks/lwip_stack/lwip_src/include/ip_module/trp_rb_tree.h77
-rw-r--r--stacks/lwip_stack/lwip_src/include/ipv4/stackx/spl_ip_addr.h162
-rw-r--r--stacks/lwip_stack/lwip_src/include/netif/common.h233
-rw-r--r--stacks/lwip_stack/lwip_src/include/netif/kni_proc.h103
-rw-r--r--stacks/lwip_stack/lwip_src/include/netif/sc_dpdk.h80
-rw-r--r--stacks/lwip_stack/lwip_src/include/netif/sharedmemory.h149
-rw-r--r--stacks/lwip_stack/lwip_src/include/netif/spl_hal.h114
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/internal_msg.h90
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_api.h276
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_api_msg.h129
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_err.h40
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_instance.h30
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_netbuf.h52
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h176
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_sbr.h33
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_sockets.h252
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_tcpip.h80
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h108
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/stackx_instance.h91
-rw-r--r--stacks/lwip_stack/lwip_src/instance/spl_instance.c49
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c1052
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/container_ip.c1132
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/ip_module_api.c347
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/network.c1106
-rw-r--r--stacks/lwip_stack/lwip_src/ip_module/trp_rb_tree.c563
-rw-r--r--stacks/lwip_stack/lwip_src/netif/ethernetif.c167
-rw-r--r--stacks/lwip_stack/lwip_src/netif/sc_dpdk.c574
-rw-r--r--stacks/lwip_stack/lwip_src/netif/spl_hal.c1774
-rw-r--r--stacks/lwip_stack/lwip_src/recycle/stackx_recycle.c676
-rw-r--r--stacks/lwip_stack/lwip_src/socket/CMakeLists.txt76
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_cfg.h54
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_container_cfg.c332
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c150
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.h48
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_event.c128
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_event.h46
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_macro.h24
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.c775
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.h78
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_prot_com.c679
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h162
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_protocol_api.c113
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.c279
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.h70
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_socket.h141
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_tcp.c1691
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_udp.c1153
-rw-r--r--stacks/lwip_stack/patch/.gitkeep0
-rw-r--r--stacks/lwip_stack/release/configure/ip_data.json8
-rw-r--r--stacks/lwip_stack/release/configure/nStackConfig.json32
-rw-r--r--stacks/lwip_stack/release/configure/network_data_tonStack.json16
-rw-r--r--stacks/lwip_stack/release/include/nstack_custom_api.h42
-rw-r--r--stacks/lwip_stack/release/lib64/.gitkeep0
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/arch/queue.c120
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/arch/sys_arch.c237
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/core/timeouts.c527
-rwxr-xr-xstacks/lwip_stack/release/lwip_helper_files/download_lwip.sh35
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/include/lwipopts.h47
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/include/opt.h2875
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/include/sys.h455
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/include/timeouts.h134
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/lwip/arch/atomic_32.h53
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/lwip/arch/cc.h82
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/lwip/arch/queue.h30
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/lwip/arch/sys_arch.h29
-rw-r--r--stacks/lwip_stack/release/lwip_helper_files/lwip/arch/win_minmax.h120
-rwxr-xr-xstacks/lwip_stack/release/script/nstack_fun.sh596
-rwxr-xr-xstacks/lwip_stack/release/script/nstack_var.sh65
-rwxr-xr-xstacks/lwip_stack/release/script/run_nstack_main.sh27
-rwxr-xr-xstacks/lwip_stack/release/script/run_nstack_master.sh29
-rwxr-xr-xstacks/lwip_stack/release/send_alarm.sh17
-rwxr-xr-xstacks/lwip_stack/release/start_nstack.sh149
-rwxr-xr-xstacks/lwip_stack/release/stop_nstack.sh51
-rwxr-xr-xstacks/lwip_stack/release/uninstall.sh34
-rw-r--r--stacks/lwip_stack/release_tar.sh86
-rw-r--r--stacks/lwip_stack/run_stackx.txt52
-rw-r--r--stacks/lwip_stack/src/CMakeLists.txt62
-rw-r--r--stacks/lwip_stack/src/alarm/CMakeLists.txt34
-rw-r--r--stacks/lwip_stack/src/alarm/alarm.c861
-rw-r--r--stacks/lwip_stack/src/alarm/alarm.h80
-rw-r--r--stacks/lwip_stack/src/alarm/alarm_api.h107
-rw-r--r--stacks/lwip_stack/src/include/nsfw_msg.h203
-rw-r--r--stacks/lwip_stack/src/include/nsfw_msg_api.h309
-rw-r--r--stacks/lwip_stack/src/include/nsfw_mt_config.h292
-rw-r--r--stacks/lwip_stack/src/include/nsfw_rti.h66
-rw-r--r--stacks/lwip_stack/src/io_adpt/CMakeLists.txt31
-rw-r--r--stacks/lwip_stack/src/io_adpt/dpdk.c2476
-rw-r--r--stacks/lwip_stack/src/maintain/CMakeLists.txt44
-rw-r--r--stacks/lwip_stack/src/maintain/fw_mt_config.c807
-rw-r--r--stacks/lwip_stack/src/maintain/nsfw_msg.c23
-rw-r--r--stacks/lwip_stack/src/maintain/nsfw_rti.c92
-rw-r--r--stacks/lwip_stack/src/nStackMain/CMakeLists.txt60
-rw-r--r--stacks/lwip_stack/src/nStackMain/main.c429
-rw-r--r--stacks/lwip_stack/src/sbr/CMakeLists.txt30
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_err.h191
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_index_ring.c212
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_index_ring.h61
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_protocol_api.h103
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_res_mgr.c88
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_res_mgr.h159
-rw-r--r--stacks/lwip_stack/src/sbr/sbr_socket.c1274
-rw-r--r--stacks/lwip_stack/src/tools/CMakeLists.txt22
-rw-r--r--stacks/lwip_stack/src/tools/dump_tool.c622
-rw-r--r--stacks/lwip_stack/src/tools/dump_tool.h81
-rw-r--r--stacks/lwip_stack/tools/CMakeLists.txt91
-rw-r--r--stacks/lwip_stack/tools/nping.c627
-rw-r--r--stacks/lwip_stack/tools/ntcpdump.c1368
-rw-r--r--stacks/lwip_stack/tools/tool_common.h243
-rw-r--r--stacks/lwip_stack/vagrant/Vagrantfile65
-rwxr-xr-xstacks/lwip_stack/vagrant/build.sh59
-rwxr-xr-xstacks/lwip_stack/vagrant/env.sh7
-rwxr-xr-xstacks/lwip_stack/vagrant/start_nstackMain.sh110
-rw-r--r--stacks/readme.txt1
-rw-r--r--stacks/rsocket/CMakeLists.txt42
-rw-r--r--stacks/rsocket/build/.gitkeep (renamed from stacks/lwip_stack/build/.gitkeep)0
-rw-r--r--stacks/rsocket/configure/module_config.json10
-rw-r--r--stacks/rsocket/configure/rd_config.json31
-rw-r--r--stacks/rsocket/doc/README.md8
-rw-r--r--stacks/rsocket/src/rsocket_adpt.c258
-rw-r--r--stacks/rsocket/src/rsocket_adpt.h23
-rw-r--r--stacks/rsocket/src/rsocket_rdma.h40
-rw-r--r--stacks/rsocket/src/rsocket_rs.c422
-rw-r--r--stacks/vpp/adapt/dmm_vcl.h36
-rw-r--r--stacks/vpp/adapt/dmm_vcl_adpt.c173
-rw-r--r--stacks/vpp/configure/module_config.json20
-rw-r--r--stacks/vpp/configure/rd_config.json26
-rw-r--r--stacks/vpp/configure/startup.conf21
-rw-r--r--stacks/vpp/configure/vpp_config6
-rw-r--r--stacks/vpp/doc/README.md115
-rw-r--r--stacks/vpp/patch/0001-Fix-modify-makefile-to-adapt-dmm.patch72
-rw-r--r--stacks/vpp/patch/0002-Fix-fix-epoll-problem.patch62
-rw-r--r--stacks/vpp/vagrant/Vagrantfile63
-rw-r--r--stacks/vpp/vagrant/build.sh224
-rw-r--r--stacks/vpp/vagrant/env.sh7
-rw-r--r--stacks/vpp/vagrant/install_prereq.sh39
183 files changed, 443 insertions, 47094 deletions
diff --git a/stacks/lwip_stack/CMakeLists.txt b/stacks/lwip_stack/CMakeLists.txt
deleted file mode 100644
index 5a5ca94..0000000
--- a/stacks/lwip_stack/CMakeLists.txt
+++ /dev/null
@@ -1,111 +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.
-#########################################################################
-
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
-PROJECT(nStack)
-SET(CMAKE_C_COMPILER "gcc")
-SET(OS_RELEASE "" CACHE STRING "User-specified OS release.")
-SET(EXECUTABLE_PATH ${CMAKE_CURRENT_LIST_DIR}/release/bin)
-SET(LIB_PATH_STATIC ${PROJECT_BINARY_DIR})
-SET(LIB_PATH_SHARED ${CMAKE_CURRENT_LIST_DIR}/release/lib64)
-SET(NSTACKTOOLS_PATH ${CMAKE_CURRENT_LIST_DIR}/release/tools)
-SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_PATH_STATIC})
-SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_PATH})
-SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_PATH_SHARED})
-
-
-MESSAGE(STATUS "Top dir is: " ${CMAKE_CURRENT_LIST_DIR})
-MESSAGE(STATUS "Static library dir: " ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
-MESSAGE(STATUS "Executable binary dir: " ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-MESSAGE(STATUS "Shared library dir: " ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-
-option(WITH_SECUREC_LIB "Option description" OFF)
-option(WITH_HAL_LIB "Option description" OFF)
-
-if(WITH_SECUREC_LIB)
- add_definitions(-DSECUREC_LIB)
-endif()
-
-if(WITH_HAL_LIB)
- add_definitions(-DHAL_LIB)
-endif()
-
-SET(post_compile "${PROJECT_BINARY_DIR}/post_compile.sh")
-FILE(WRITE ${post_compile} "#!/bin/bash\n")
-FILE(APPEND ${post_compile}
-"
-
-ln -sfn ./run_nstack_main.sh ${CMAKE_CURRENT_LIST_DIR}/release/script/run_nstack.sh
-echo post compile process success.
-"
-)
-
-ADD_CUSTOM_TARGET(DPDK ALL COMMAND sh post_compile.sh)
-
-execute_process(
- COMMAND cp -rf ${CMAKE_CURRENT_LIST_DIR}/../../release/include ${CMAKE_CURRENT_LIST_DIR}/src/
- COMMAND cp ${CMAKE_CURRENT_LIST_DIR}/../../release/lib64/libnStackAPI.so ${CMAKE_CURRENT_LIST_DIR}/release/lib64/
- COMMAND cp ${CMAKE_CURRENT_LIST_DIR}/../../release/lib64/libdmm_api.so ${CMAKE_CURRENT_LIST_DIR}/release/lib64/
- COMMAND echo "stacklwip prepare ok"
-)
-execute_process(
- COMMAND sh ${CMAKE_CURRENT_LIST_DIR}/release/lwip_helper_files/download_lwip.sh
-)
-
-ADD_DEFINITIONS(-D_GNU_SOURCE -DNSTACK_GETVER_VERSION="18.10")
-
-SET(JSON_C_SRC ${CMAKE_CURRENT_LIST_DIR}/../../thirdparty/json/json-c-0.12.1)
-INCLUDE(ExternalProject)
-ExternalProject_Add(
- JSON
- SOURCE_DIR ${JSON_C_SRC}
- BUILD_IN_SOURCE 1
- CONFIGURE_COMMAND sh autogen.sh COMMAND sh ./configure --enable-static --with-pic
- BUILD_COMMAND make -j 8
- INSTALL_COMMAND cp -f .libs/libjson-c.a ${LIB_PATH_STATIC}/
-)
-
-SET(SECUREC_SRC ${CMAKE_CURRENT_LIST_DIR}/../SecureC/src)
-SET(SECUREC_SRC_H ${CMAKE_CURRENT_LIST_DIR}/../SecureC/include)
-
-if(WITH_SECUREC_LIB)
-INCLUDE(ExternalProject)
-ExternalProject_Add(
- SECUREC
- SOURCE_DIR ${SECUREC_SRC}
- BUILD_IN_SOURCE 1
- CONFIGURE_COMMAND ""
- BUILD_COMMAND COMMAND make -j 8
- INSTALL_COMMAND cp -f ${SECUREC_SRC}/../lib/libsecurec.so ${LIB_PATH_SHARED}/
-)
-endif()
-
-SET(GLOG_SRC ${CMAKE_CURRENT_LIST_DIR}/../../thirdparty/glog/glog-0.3.4)
-INCLUDE(ExternalProject)
-ExternalProject_Add(
- GLOG
- SOURCE_DIR ${GLOG_SRC}
- BUILD_IN_SOURCE 1
- CONFIGURE_COMMAND autoreconf COMMAND sh configure CFLAGS=-fPIC CXXFLAGS=-fPIC
- BUILD_COMMAND COMMAND make -j 8
- INSTALL_COMMAND cp -f ${GLOG_SRC}/.libs/libglog.a ${LIB_PATH_STATIC}/
-)
-
-ADD_SUBDIRECTORY(src)
-ADD_SUBDIRECTORY(lwip_src)
-ADD_SUBDIRECTORY(lwip_src/socket)
-ADD_SUBDIRECTORY(tools)
-#ADD_SUBDIRECTORY(thirdparty/rsrdma)
diff --git a/stacks/lwip_stack/configure/module_config.json b/stacks/lwip_stack/configure/module_config.json
deleted file mode 100644
index c9c872b..0000000
--- a/stacks/lwip_stack/configure/module_config.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "default_stack_name": "kernel",
- "module_list": [
- {
- "stack_name": "kernel",
- "libname": "./",
- "deploytype": "1",
- "stackid": "0",
- },
- {
- "stack_name": "lwip",
- "libname": "liblwip_dpdk.so",
- "deploytype": "3",
- "stackid": "1",
- },
- ]
-}
diff --git a/stacks/lwip_stack/configure/nStackConfig.json b/stacks/lwip_stack/configure/nStackConfig.json
deleted file mode 100644
index 3cc54c5..0000000
--- a/stacks/lwip_stack/configure/nStackConfig.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-"cfg_seg_socket": [
-{
- "socket_num": 8192,
- "arp_stale_time": 300,
- "arp_bc_retrans_num": 5
-}
-],
-"cfg_seg_log": [
-{
- "run_log_size": 50,
- "run_log_count": 10,
- "mon_log_size": 10,
- "mon_log_count": 10
-}
-],
-"cfg_seg_thread_pri": [
-{
- "comment":"0:SCHED_OTHER, 1:SCHED_FIFO, 2:SCHED_RR",
- "sched_policy": 0,
- "thread_pri": 0
-}
-],
-"cfg_seg_path": [
-{
- "stackpool_log_path": "/var/log/nStack",
- "master_log_path": "/var/log/nStack",
- "nstack_log_path": "/var/log/nStack",
- "dpdk_log_path": "/var/log/nstack-dpdk"
-}
-]
-}
diff --git a/stacks/lwip_stack/configure/rd_config.json b/stacks/lwip_stack/configure/rd_config.json
deleted file mode 100644
index 3109bcd..0000000
--- a/stacks/lwip_stack/configure/rd_config.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "ip_route": [
- {
- "subnet": "192.168.1.1/24",
- "stack_name": "lwip",
- },
- {
- "subnet": "192.167.1.1/24",
- "stack_name": "kernel",
- },
- {
- "subnet": "192.166.1.1/24",
- "stack_name": "kernel",
- }
- ],
- "prot_route": [
- {
- "proto_type": "1",
- "stack_name": "lwip",
- },
- {
- "proto_type": "2",
- "stack_name": "kernel",
- }
- ],
-}
diff --git a/stacks/lwip_stack/doc/README.md b/stacks/lwip_stack/doc/README.md
deleted file mode 100644
index a76b18a..0000000
--- a/stacks/lwip_stack/doc/README.md
+++ /dev/null
@@ -1,125 +0,0 @@
-# 1. What is lwIP
-lwIP is a light-weight implementation of the TCP/IP protocol suite.
-lwIP is freely available (under a BSD-style license) in C source
-code format and can be downloaded from the development homepage.
-The focus of the lwIP TCP/IP implementation is to reduce the RAM
-usage while still having a full scale TCP.
-
-# 2. How to use lwIP
-
-## How to integrate lwIP into DMM
-The file CMakeList.txt defined the compiling process, including downloading
-the lwip 2.7.0 code and pushing the helper files into it, or modify
-lwip files.
-
-Currently lwip will not be build as separate lib, instead it'll be part
-of the excutable namely "nStackMain".
-lwip Stack will run in pipeline mode. Application will run in one process
-and lwip will run as "nStackMain" process. Below picture depicts
-a birds eye view of lwip in DMM pipeline mode.
-![Lwip in DMM framework](dmm_lwip.png)
-
-## Compile
-```sh
- #cd dmm/build && cmake ..
- #make
- #cd ../stacks/lwip_stack/build && cmake ..
- #make
-```
-
-## Test
-- Steps 1: update some environment variables
-```sh
- #export LD_LIBRARY_PATH=${dmm}/stacks/lwip_stack/release/lib64/
- #export LD_PRELOAD=${dmm}/release/lib64/libnStackAPI.so
- #export NSTACK_MOD_CFG_FILE=${dmm}/stacks/lwip_stack/configure/module_config.json
- #export NSTACK_MOD_CFG_RD=${dmm}/stacks/lwip_stack/configure/rd_config.json
- #export NSTACK_LOG_ON=DBG (optional enable debug)
-```
-- Steps 2: Modify rd_config.json(located at dmm/stacks/lwip_stack/configure/)
-```sh
- #vim rd_config.json
- Eg. set "subnet": "192.168.21.1/24"
-```
-Note:
- Means dmm chose lwip_stack if subnet matches 192.168.21.*
-
-- Steps 3: Run nStackMain(lwip stack))
-```sh
- #cp ${dmm}/stacks/lwip_stack/release/configure/ip_data.json ${dmm}/stacks/lwip_stack/release/bin/
- #cp ${dmm}/stacks/lwip_stack/release/configure/network_data_tonStack.json ${dmm}/stacks/lwip_stack/release/bin/
-
-```
-Modify ip_data.json
-```
-Change ref_nic => to interface name which you want to use
-Change ip_cidr => ip address you want to use.
-```
-Modify network network_data_tonStack.json
-```
-Change ref_nic => to interface name which you want to use
-Change subnet => Subnet (ip_cidr belongs to this subnet)
-Change gateway, range-start, range-end, dst, gw accordingly. This information will be used by DMM to configure network.
-```
-Run the process:
-```
- #cd ${dmm}/stacks/lwip_stack/release
- #./start_nstack.sh
-```
-
-If you want to run it with vhost-user, you can run the start_nstack.sh with parameters as follow.
-```
- #./start_nstack.sh --vdev virtio_user,mac=fa:16:3e:5f:b3:08,path=/tmp/unix/sock1.sock,queues=8,queue_size=1024 --no-pci
-```
-
-- Steps 4: Communication test between machine A(as server) with machine B
- (as client)
-
-##### Run in machine A
-```sh
- #./dmm/release/bin/vs_epoll -p 20000 -d 192.168.21.180 -a 10000 -s 192.168.21.181 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
-```
-Note:
- Means the current machine would be server, and it's
-destination address is 192.168.21.180 (client address),
-source address is 192.168.21.181(server address)
-
-##### Run in machine B
-```
- #./dmm/release/bin/vc_common -p 20000 -d 192.168.21.181 -a 10000 -s 192.168.21.180 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
-```
-Note:
- Means the current machine would be client, and it's
-destination address is 192.168.21.181 (server address),
-source address is 192.168.21.180(client address)
-
-# 3. Document description
-
-(dmm/stacks/lwip_stack/doc)
-
-## CMakeLists.txt
-Control file for Cmake compiling.
-
-## config folder
-##### module_config.json
-- module_config.json is for configuring dmm protocol stack module.
-
-##### rd_config.json
-- rd_config.json is to choose which module is better to go through, if subnet matches, It will go through lwip protocol stack when RD type is nstack-dpdk
-
-## lwip helper files.
-lwip helper files is implmentation and modification of some supportive functions to run lwip with dmm.
-
-## lwip_stack/src folder
-
-- Implmetation of nStackMain process which provides the framework to hold lwip stack.
-
-## lwip_stack/lwip_src
-- Downloaded opensource lwip 2.7.0. code.
-
-# 4. More Information
-https://wiki.fd.io/view/DMM
-https://savannah.nongnu.org/projects/lwip/
-http://lwip.wikia.com/wiki/LwIP_Wiki
-[DMM_DeveloperManual.md](../../doc/DMM_DeveloperManual.md)
-
diff --git a/stacks/lwip_stack/doc/dmm_lwip.png b/stacks/lwip_stack/doc/dmm_lwip.png
deleted file mode 100644
index 403eed3..0000000
--- a/stacks/lwip_stack/doc/dmm_lwip.png
+++ /dev/null
Binary files differ
diff --git a/stacks/lwip_stack/lwip_src/CMakeLists.txt b/stacks/lwip_stack/lwip_src/CMakeLists.txt
deleted file mode 100644
index 4425905..0000000
--- a/stacks/lwip_stack/lwip_src/CMakeLists.txt
+++ /dev/null
@@ -1,98 +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.
-#########################################################################
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIE -pie -fPIC -m64 -mssse3 -std=gnu89")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wshadow -Wfloat-equal -Wformat=2")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium")
-
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DDPDK_MODULE=0)
-if(WITH_HAL_LIB)
-SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../src/include/rtp_config.h)
-else()
- SET(PAL_H_DIRECTORIES "/usr/include/dpdk/")
- SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common/common_sys_config.h)
- INCLUDE_DIRECTORIES(
- ${PAL_H_DIRECTORIES}
- )
-endif()
-SET(COMPLE_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../src/include/compile_config.h)
-SET(MGR_COM ${CMAKE_CURRENT_LIST_DIR}/../src/include/mgr_com.h)
-ADD_DEFINITIONS(-include ${RTP_CONFIG})
-ADD_DEFINITIONS(-include ${COMPLE_CONFIG})
-ADD_DEFINITIONS(-include ${MGR_COM})
-if(WITH_SECUREC_LIB)
-LINK_LIBRARIES(pthread rt securec)
-else()
-LINK_LIBRARIES(pthread rt)
-endif()
-LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC})
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_LIST_DIR}/../../../SecureC/include
- ${CMAKE_CURRENT_LIST_DIR}/../../../thirdparty/json/json-c-0.12.1/
- ${CMAKE_CURRENT_LIST_DIR}/../../../thirdparty/glog/glog-0.3.4/src/
- ${CMAKE_CURRENT_LIST_DIR}/../src/include/
- ${CMAKE_CURRENT_LIST_DIR}/lwip/include/
- ${CMAKE_CURRENT_LIST_DIR}/lwip/include/lwip/
-)
-
-FILE(GLOB API api/*.c)
-FILE(GLOB_RECURSE CORE core/*.c)
-FILE(GLOB INSTANCE instance/*.c)
-FILE(GLOB IPMODULE ip_module/*.c)
-FILE(GLOB NETIF netif/*.c)
-FILE(GLOB RECYCLE recycle/*.c)
-FILE(GLOB_RECURSE MAINTAIN maintain/*.c)
-FILE(GLOB COMMON common/*.c)
-FILE(GLOB_RECURSE LWIPSRC lwip/arch/*.c lwip/core/*.c lwip/netif/*.c)
-FOREACH(item ${LWIPSRC})
- IF(${item} MATCHES "slipif.c")
- LIST(REMOVE_ITEM LWIPSRC ${item})
- ENDIF(${item} MATCHES "slipif.c")
-ENDFOREACH(item)
-
-ADD_LIBRARY(stacklwip STATIC ${API} ${ARCH} ${CORE} ${NETIF} ${NETTOOL} ${IPMODULE} ${COMMON} ${INSTANCE} ${RECYCLE} ${MAINTAIN} ${LWIPSRC})
-ADD_DEPENDENCIES(stacklwip JSON GLOG DPDK)
-TARGET_INCLUDE_DIRECTORIES(
- stacklwip
- BEFORE
- PRIVATE
- common/
- socket/
- include/
- include/util/
- include/log/
- include/ipv4/
- include/ipv4/stackx
- include/stackx/
- include/netif/
- include/nstack/
- include/ip_module/
- lwip/include/lwip/
- lwip/include/lwip/arch/
- lwip/include/lwip/apps/
- lwip/include/lwip/priv/
- lwip/include/lwip/prot/
- lwip/include/netif/
- lwip/include/netif/ppp/
- lwip/include/netif/ppp/polarssl/
- ${CMAKE_CURRENT_LIST_DIR}/../src/sbr/
- ${CMAKE_CURRENT_LIST_DIR}/../src/include/
- ${CMAKE_CURRENT_LIST_DIR}/../src/alarm/
-)
-
diff --git a/stacks/lwip_stack/lwip_src/api/spl_api.c b/stacks/lwip_stack/lwip_src/api/spl_api.c
deleted file mode 100644
index 5c8af7d..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_api.c
+++ /dev/null
@@ -1,51 +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 "nsfw_init.h"
-//#include "sockets.h"
-//#include <netinet/in.h>
-
-#include "stackx_spl_share.h"
-#include "stackx/spl_api.h"
-//#include "stackx/ip.h"
-#include "sharedmemory.h"
-#include "spl_hal.h"
-#include "hal_api.h"
-#include "alarm_api.h"
-#include "nsfw_mt_config.h"
-#include "nsfw_recycle_api.h"
-#include "nstack_dmm_adpt.h"
-
-/* main entry for stackx */
-int
-spl_main_init (void *args)
-{
- (void) args;
- if (init_by_main_thread () < 0)
- {
- return -1;
- }
-
- return 0;
-}
-
-/* *INDENT-OFF* */
-NSFW_MODULE_NAME ("STACKX_MAIN")
-NSFW_MODULE_PRIORITY (10)
-NSFW_MODULE_DEPENDS (NSFW_ALARM_MODULE)
-NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE)
-NSFW_MODULE_INIT (spl_main_init)
-/* *INDENT-ON* */
diff --git a/stacks/lwip_stack/lwip_src/api/spl_api_msg.c b/stacks/lwip_stack/lwip_src/api/spl_api_msg.c
deleted file mode 100644
index b7ea24b..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_api_msg.c
+++ /dev/null
@@ -1,3329 +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 "nsfw_msg.h"
-#include "spl_opt.h"
-#include "spl_ip_addr.h"
-//#include "stackx_socket.h"
-#include "cpuid.h"
-//#include "sockets.h"
-#include <netinet/in.h>
-#include <errno.h>
-#include <netinet/tcp.h>
-
-#include "stackx_prot_com.h"
-#include "spl_api.h"
-//#include "stackx/ip.h"
-#include "sc_dpdk.h"
-#include "spl_sbr.h"
-//#include "maintain/spl_dfx.h"
-#include "stackx_tx_box.h"
-#include "spl_instance.h"
-#include "spl_sockets.h"
-
-#include "nstack_dmm_adpt.h"
-
-#include "tcp.h"
-#include "udp.h"
-#include "pbuf.h"
-#include "tcp_priv.h"
-#include "init.h"
-#include "timeouts.h"
-
-#include "stackx_pbuf_comm.h"
-#include "spl_netbuf.h"
-#include "spl_hal.h"
-#include "sys_arch.h"
-#include "tcpip.h"
-#include "debug.h"
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-
-extern struct tcp_pcb *tcp_bound_pcbs;
-extern union tcp_listen_pcbs_t tcp_listen_pcbs;
-extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a
- state in which they accept or send
- data. */
-extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */
-extern struct tcp_pcb **const tcp_pcb_lists[NUM_TCP_PCB_LISTS];
-extern stackx_instance *p_def_stack_instance;
-extern u16_t g_offSetArry[SPL_PBUF_MAX_LAYER];
-
-#define TCP_FN_NULL 0
-#define TCP_FN_DEFAULT 1
-#define TCP_FN_STACKX 2
-#define TCP_FN_MAX 3
-
-struct callback_fn tcp_fn[TCP_FN_MAX] = {
- {NULL, NULL, NULL, NULL, NULL, NULL, NULL},
- {NULL, spl_tcp_recv_null, NULL, NULL, NULL, NULL},
- {spl_sent_tcp, spl_recv_tcp, spl_do_connected, spl_poll_tcp, spl_err_tcp,
- NULL, spl_accept_function},
-};
-
-// extern int nstack_get_nstack_fd_snapshot_from_proto_fd(int proto_fd);
-extern void tcp_drop_conn (spl_netconn_t * conn);
-extern void unlink_pcb (struct common_pcb *cpcb);
-extern struct queue *get_msgbox (int tos);
-
-#define SPL_SET_NONBLOCKING_CONNECT(conn, val) \
-do { \
- if (val) \
- { \
- (conn)->flags |= SPL_NETCONN_FLAG_IN_NONBLOCKING_CONNECT; \
- } \
- else \
- { \
- (conn)->flags &= ~SPL_NETCONN_FLAG_IN_NONBLOCKING_CONNECT; \
- } \
- } while (0)
-
-#define SPL_IN_NONBLOCKING_CONNECT(conn) (((conn)->flags & SPL_NETCONN_FLAG_IN_NONBLOCKING_CONNECT) != 0)
-
-extern int tcpip_thread_control;
-
-void
-spl_event_callback (struct spl_netconn *conn, enum spl_netconn_evt evt,
- int postFlag)
-{
- NSPOL_LOGDBG (SOCK_INFO, "Get event]conn=%p,evt=%d,postFlag=%d", conn, evt,
- postFlag);
- /* Get socket */
- if (!conn)
- {
- NSPOL_LOGDBG (SOCK_INFO, "conn=NULL");
- return;
- }
-
- switch (evt)
- {
- case SPL_NETCONN_EVT_RCVPLUS:
- __sync_fetch_and_add (&conn->rcvevent, 1);
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), EPOLLIN);
- }
- break;
- case SPL_NETCONN_EVT_RCVMINUS: // This will never be reached
- __sync_fetch_and_sub (&conn->rcvevent, 1);
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), EPOLLIN);
- }
- break;
- case SPL_NETCONN_EVT_SENDPLUS:
- conn->sendevent = 1;
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), EPOLLOUT);
- }
- break;
- case SPL_NETCONN_EVT_SENDMINUS:
- conn->sendevent = 0;
-
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), EPOLLOUT);
- }
- break;
- case SPL_NETCONN_EVT_ERROR:
- conn->errevent |= EPOLLERR;
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), conn->errevent);
- conn->errevent = 0;
- }
- break;
-#if 1
- case SPL_NETCONN_EVT_ACCEPT:
- __sync_fetch_and_add (&conn->rcvevent, 1);
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), EPOLLIN);
- }
- break;
-
- case SPL_NETCONN_EVT_HUP:
- conn->errevent |= EPOLLHUP;
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), conn->errevent);
- conn->errevent = 0;
- }
- break;
- case SPL_NETCONN_EVT_RDHUP:
- conn->errevent |= EPOLLRDHUP;
- if ((conn->epoll_flag) && (postFlag))
- {
- nstack_event_callback (ADDR_SHTOL (conn->epInfo), conn->errevent);
- conn->errevent = 0;
- }
- break;
-#endif
-
- default:
- NSTCP_LOGERR ("unknown event]conn=%p,event=%d", conn, evt);
- return;
- }
- return;
-}
-
-u8
-get_shut_op (data_com_msg * m)
-{
- if (m && m->param.module_type == MSG_MODULE_SBR
- && m->param.major_type == SPL_TCPIP_NEW_MSG_API)
- {
- if (m->param.minor_type == SPL_API_DO_CLOSE)
- return ((msg_close *) (m->buffer))->shut;
-
- if (m->param.minor_type == SPL_API_DO_DELCON)
- return ((msg_delete_netconn *) (m->buffer))->shut;
- }
-
- return SPL_NETCONN_SHUT_RDWR;
-}
-
-/*
- Never using head/tail to judge whether need to do enque/deque, just do enque&deque, the return val will tell you ring is full/empty or not
- rtp_perf_ring never provid ring_full/ring_empty function;
- one more thing the rtp_ring_enque/deque result must be checked.
-*/
-err_t
-accept_enqueue (spl_netconn_t * conn, void *p)
-{
- if (conn == NULL)
- {
- NSPOL_LOGERR ("accept_enqueue: invalid input]conn=%p", conn);
- return ERR_VAL;
- }
-
- NSPOL_LOGDBG (NEW_RING_DEBUG, "accept_enqueue]conn=%p,p=%p", conn, p);
- mring_handle ring = conn->recv_ring;
- if (NULL == ring)
- {
- NSPOL_LOGERR ("conn=%p accept new conn=%p enqueue ring addr is null",
- conn, p);
- return ERR_VAL;
- }
-
- err_t retVal = ERR_MEM;
- int enQSucCnt = 0;
- int nTryCnt = 0;
- do
- {
- enQSucCnt = nsfw_mem_ring_enqueue (ring, (void *) p);
- if (1 == enQSucCnt)
- {
- retVal = ERR_OK;
- break;
- }
- else if (0 == enQSucCnt)
- {
- sys_sleep_ns (0, 3000);
- nTryCnt++;
- }
- else
- {
- retVal = ERR_VAL;
- break;
- }
- }
- while (nTryCnt < MAX_TRY_GET_MEMORY_TIMES);
-
- return retVal;
-}
-
-err_t
-accept_dequeue (spl_netconn_t * lconn, void **new_buf,
- u32_t timeout /*miliseconds */ )
-{
- struct timespec starttm;
- struct timespec endtm;
- long timediff;
- long timediff_sec;
- u32_t timeout_sec = timeout / 1000;
-
-#define FAST_SLEEP_TIME 10000
-#define SLOW_SLEEP_TIME 500000
-#define FAST_RETRY_COUNT 100
- unsigned int retry_count = 0;
-
- if (NULL == lconn || NULL == new_buf)
- {
- NSPOL_LOGERR ("accept_dequeue invalid input]conn=%p,newbuf=%p", lconn,
- new_buf);
- return ERR_ARG;
- }
-
- if (timeout != 0)
- {
- /* Handle system time change side-effects */
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &starttm)))
- {
- //NSPOL_LOGERR("Failed to get time]errno=%d", errno);
- }
- }
-
- mring_handle ring = lconn->recv_ring;
- if (ring == NULL)
- {
- NSPOL_LOGERR ("Get rtp_perf_ring failed]conn=%p", lconn);
- return ERR_ARG;
- }
-
- int nDequeRt;
- int retVal;
- while (1)
- {
- if ((lconn->shut_status) && (-1 != (int) timeout))
- {
- retVal = ERR_VAL;
- break;
- }
-
- nDequeRt = nsfw_mem_ring_dequeue (ring, new_buf);
- if (nDequeRt == 1)
- {
- retVal = ERR_OK;
- break;
- }
- else if (nDequeRt == 0)
- {
- if ((int) timeout == -1)
- {
- retVal = ERR_WOULDBLOCK;
- break;
- }
-
- if (timeout != 0)
- {
- /* Handle system time change side-effects */
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &endtm)))
- {
- //NSPOL_LOGERR("Failed to get time, errno = %d", errno);
- }
- timediff_sec = endtm.tv_sec - starttm.tv_sec;
- if (timediff_sec >= timeout_sec)
- {
- timediff = endtm.tv_nsec > starttm.tv_nsec ?
- (timediff_sec * 1000) + (endtm.tv_nsec -
- starttm.tv_nsec) /
- USEC_TO_SEC : (timediff_sec * 1000) -
- ((starttm.tv_nsec - endtm.tv_nsec) / USEC_TO_SEC);
-
- /*NOTE: if user configured the timeout as say 0.5 ms, then timediff value
- will be negetive if still 0.5 ms is not elapsed. this is intended and we should
- not typecast to any unsigned type during this below if check */
- if (timediff > (long) timeout)
- {
- retVal = ERR_TIMEOUT;
- break;
- }
- }
- }
-
- /* reduce CPU usage in blocking mode */
- if (retry_count < FAST_RETRY_COUNT)
- {
- sys_sleep_ns (0, FAST_SLEEP_TIME);
- retry_count++;
- }
- else
- {
- sys_sleep_ns (0, SLOW_SLEEP_TIME);
- }
-
- continue;
- }
- else
- {
- retVal = ERR_VAL;
- break;
- }
- }
-
- return retVal;
-}
-
-err_t
-sp_enqueue (struct common_pcb * cpcb, void *p)
-{
- mring_handle ring = NULL;
- spl_netconn_t *conn = NULL;
- int enQueRet = 0;
-
- if (cpcb == NULL || (NULL == (conn = cpcb->conn)))
- {
- NSTCP_LOGERR ("conn NULL!");
- return ERR_VAL;
- }
-
- NSPOL_LOGDBG (NEW_RING_DEBUG, "]conn=%p,buf=%p", cpcb->conn, p);
- ring = conn->recv_ring;
- if (NULL == ring)
- {
- NSPOL_LOGERR ("Get rtp_perf_ring failed]conn=%p.", conn);
- return ERR_CLSD;
- }
-
- /* clear LOOP_SEND_FLAG to indicate that this pbuf has been given to upper layer */
- struct spl_pbuf *tmpbuf = p;
- while (tmpbuf)
- {
- tmpbuf->res_chk.u8Reserve &= ~LOOP_SEND_FLAG;
- tmpbuf = tmpbuf->next;
- }
-
- enQueRet = nsfw_mem_ring_enqueue (ring, p);
- if (1 != enQueRet)
- {
- NS_LOG_CTRL (LOG_CTRL_RECV_QUEUE_FULL, LOGTCP, "NSTCP", NSLOG_WAR,
- "ringvbox_enqueue buf is full]conn=%p.", conn);
-
- return ERR_MEM;
- }
-
- return ERR_OK;
-}
-
-/**
- * Receive callback function for UDP netconns.
- * Posts the packet to conn->recvmbox or deletes it on memory error.
- *
- * @see udp.h (struct udp_pcb.recv) for parameters
- */
-
-static void
-spl_recv_udp (void *arg, struct udp_pcb *pcb, struct pbuf *p,
- const ip_addr_t * ipaddr, u16_t port)
-{
- struct spl_netbuf *buf;
- spl_netconn_t *conn = (spl_netconn_t *) arg;
- struct spl_pbuf *spl_pb = NULL; //??
-
- if (NULL == pcb)
- {
- NSPOL_LOGERR ("recv_udp must have a pcb argument");
- pbuf_free (p);
- return;
- }
-
- if (NULL == arg)
- {
- NSPOL_LOGERR ("recv_udp must have an argument");
- pbuf_free (p);
- return;
- }
- /* //@TODO: malloc and Copy splbuf */
- struct common_pcb *cpcb = (struct common_pcb *) (conn->comm_pcb_data);
-
- u16_t proc_id = spl_get_lcore_id ();
-
- spl_pb = spl_pbuf_alloc_hugepage (SPL_PBUF_TRANSPORT,
- p->tot_len +
- g_offSetArry[SPL_PBUF_TRANSPORT],
- SPL_PBUF_HUGE, proc_id, conn);
-
- if (!spl_pb)
- {
- NSPOL_LOGINF (TCP_DEBUG, "spl_pbuf_alloc_hugepage Failed!!!");
- return;
- }
-
- pbuf_to_splpbuf_copy (spl_pb, p);
- pbuf_free (p);
-
- buf = (struct spl_netbuf *) ((char *) spl_pb + sizeof (struct spl_pbuf));
- buf->p = spl_pb;
- spl_ip_addr_set (&buf->addr, ipaddr);
- buf->port = port;
-
- err_t ret = sp_enqueue (cpcb, (void *) spl_pb);
- if (ret != ERR_OK)
- {
- NSPOL_LOGDBG (UDP_DEBUG, "mbox post failed");
- spl_netbuf_delete (buf);
- return;
- }
- else
- {
- /* Register event with callback */
- NSPOL_LOGDBG (UDP_DEBUG | LWIP_DBG_TRACE,
- "recv a udp packet: and api_event");
- SPL_API_EVENT (cpcb->conn, SPL_NETCONN_EVT_RCVPLUS, 1);
- }
-}
-
-/**
- * Receive callback function for TCP netconns.
- * Posts the packet to conn->recvmbox, but doesn't delete it on errors.
- *
- * @see tcp.h (struct tcp_pcb.recv) for parameters and return value
- */
-
-err_t
-spl_recv_tcp (void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
-{
- struct spl_pbuf *spl_pb = NULL;
- u32_t len;
-
- if (NULL == pcb)
- {
- NSTCP_LOGERR ("recv_tcp must have a pcb argument");
- pbuf_free (p);
- return ERR_ARG;
- }
-
- if (NULL == arg)
- {
- NSTCP_LOGERR ("must have an argument]pcb=%p", pcb);
- pbuf_free (p);
- return ERR_ARG;
- }
-
- spl_netconn_t *conn = (spl_netconn_t *) arg;
-
- /* Unlike for UDP or RAW pcbs, don't check for available space
- using recv_avail since that could break the connection
- (data is already ACKed) */
- /* don't overwrite fatal errors! */
- (void) err;
- if (p == NULL)
- {
- return ERR_OK;
- }
-
- len = p->tot_len;
-
- u16_t proc_id = spl_get_lcore_id ();
-
- spl_pb = spl_pbuf_alloc_hugepage (SPL_PBUF_TRANSPORT,
- p->tot_len +
- g_offSetArry[SPL_PBUF_TRANSPORT],
- SPL_PBUF_HUGE, proc_id, conn);
-
- if (!spl_pb)
- {
- NSPOL_LOGINF (TCP_DEBUG, "spl_pbuf_alloc_hugepage Failed!!!");
- return ERR_MEM;
- }
-
- pbuf_to_splpbuf_copy (spl_pb, p);
- pbuf_free (p);
-
- if (sp_enqueue ((struct common_pcb *) conn->comm_pcb_data, (void *) spl_pb)
- != ERR_OK)
- {
- NSPOL_LOGDBG (TCP_DEBUG, "sp_enqueue!=ERR_OK]conn=%p", conn);
- spl_pbuf_free (spl_pb);
- return ERR_MEM;
- }
-
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_RCVPLUS, 1);
- conn->recv_avail_prod += len;
-
- return ERR_OK;
-}
-
-/**
- * Poll callback function for TCP netconns.
- * Wakes up an application thread that waits for a connection to close
- * or data to be sent. The application thread then takes the
- * appropriate action to go on.
- *
- * Signals the conn->sem.
- * netconn_close waits for conn->sem if closing failed.
- *
- * @see tcp.h (struct tcp_pcb.poll) for parameters and return value
- */
-err_t
-spl_poll_tcp (void *arg, struct tcp_pcb * pcb)
-{
- spl_netconn_t *conn = (spl_netconn_t *) arg;
- struct tcp_pcb *tpcb = NULL;
-
- if (NULL == conn)
- {
- NSPOL_LOGERR ("conn==NULL");
- return ERR_VAL;
- }
-
- if (conn->state == SPL_NETCONN_WRITE)
- {
- (void) do_writemore (conn);
-
- /* do_close_internal, can release th PCB
- and connection CB. so checking NETCONN_FLAG_CHECK_WRITESPACE should not be
- done after do_close_internal. anyway this flag is used with data send.(do_writemore) */
- /* Did a nonblocking write fail before? Then check available write-space. */
- if (conn->flags & SPL_NETCONN_FLAG_CHECK_WRITESPACE)
- {
- tpcb = (struct tcp_pcb *) conn->private_data;
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((tpcb != NULL) && (tcp_sndbuf (tpcb) > TCP_SNDLOWAT) &&
- (tcp_sndqueuelen (tpcb) < TCP_SNDQUEUELOWAT))
- {
- conn->flags &= ~SPL_NETCONN_FLAG_CHECK_WRITESPACE;
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_SENDPLUS, 1);
- }
- }
- }
- else if (conn->state == SPL_NETCONN_CLOSE)
- {
- (void) do_close_internal ((struct common_pcb *) conn->comm_pcb_data, 0);
- }
-
- /* @todo: implement connect timeout here? */
- return ERR_OK;
-}
-
-/**
- * Default receive callback that is called if the user didn't register
- * a recv callback for the pcb.
- */
-err_t
-spl_tcp_recv_null (void *arg, struct tcp_pcb * pcb, struct pbuf * p,
- err_t err)
-{
- LWIP_UNUSED_ARG (arg);
-
- if (p != NULL)
- {
- tcp_recved (pcb, p->tot_len);
- pbuf_free (p);
- }
- else if (err == ERR_OK)
- {
- return tcp_close (pcb);
- }
-
- return ERR_OK;
-}
-
-/**
- * Sent callback function for TCP netconns.
- * Signals the conn->sem and calls API_EVENT.
- * netconn_write waits for conn->sem if send buffer is low.
- *
- * @see tcp.h (struct tcp_pcb.sent) for parameters and return value
- */
-err_t
-spl_sent_tcp (void *arg, struct tcp_pcb * pcb, u16_t len)
-{
- spl_netconn_t *conn = (spl_netconn_t *) arg;
-
- if (NULL == conn)
- {
- NSPOL_LOGERR ("conn==NULL");
- return ERR_VAL;
- }
-
- if (conn->state == SPL_NETCONN_WRITE)
- {
- (void) do_writemore (conn);
- }
- else if (conn->state == SPL_NETCONN_CLOSE)
- {
- (void) do_close_internal ((struct common_pcb *) conn->comm_pcb_data, 0);
- }
-
- /* conn is already checked for NULL above with ASSERT */
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if (pcb->snd_buf > TCP_SNDLOWAT)
- {
- conn->flags &= ~SPL_NETCONN_FLAG_CHECK_WRITESPACE;
- if (((struct common_pcb *) conn->comm_pcb_data)->model == SOCKET_STACKX)
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_SENDPLUS, 1);
- }
-
- return ERR_OK;
-}
-
-/**
- * Error callback function for TCP netconns.
- * Signals conn->sem, posts to all conn mboxes and calls API_EVENT.
- * The application thread has then to decide what to do.
- *
- * @see tcp.h (struct tcp_pcb.err) for parameters
- */
-void
-spl_err_tcp (void *arg, err_t err)
-{
- spl_netconn_t *conn;
- enum spl_netconn_state old_state;
- data_com_msg *forFree = NULL;
-
- struct common_pcb *cpcb;
-
- NSTCP_LOGINF ("Enter err_tcp.");
-
- conn = (spl_netconn_t *) arg;
- cpcb = (struct common_pcb *) (conn->comm_pcb_data);
-
- old_state = conn->state;
- conn->state = SPL_NETCONN_NONE;
-
- /* Call unlink pcb no matter what */
- unlink_pcb (cpcb);
- if (old_state == SPL_NETCONN_CLOSE)
- {
- /* RST during close: let close return success & dealloc the netconn */
- err = ERR_OK;
- SPL_NETCONN_SET_SAFE_ERR (conn, ERR_OK);
- }
- else
- {
- SPL_NETCONN_SET_SAFE_ERR (conn, err);
- }
-
- NSTCP_LOGWAR ("inform HUP and ERROR event.");
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_RCVPLUS, 0);
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_SENDPLUS, 0);
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_ERROR, 0);
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_HUP, 1);
-
- if ((old_state == SPL_NETCONN_WRITE) || (old_state == SPL_NETCONN_CLOSE)
- || (old_state == SPL_NETCONN_CONNECT))
- {
- int was_nonblocking_connect = spl_netconn_is_nonblocking (conn);
- SPL_SET_NONBLOCKING_CONNECT (conn, 0);
-
- if (!was_nonblocking_connect)
- {
- /* set error return code */
- if (NULL == cpcb->current_msg)
- {
- NSPOL_LOGERR ("conn->current_msg==NULL");
- return;
- }
-
- /* current msg could be connect msg or write_buf_msg */
- SET_MSG_ERR (cpcb->current_msg, err);
- /* signal app to exit */
- if (old_state == SPL_NETCONN_CONNECT
- && !spl_netconn_is_nonblocking (conn))
- {
- SYNC_MSG_ACK (cpcb->current_msg);
- }
-
- /* no matter it's connect msg or write msg, we will no process it any more */
- cpcb->current_msg = NULL;
-
- /* but, if msg is write_buf_msg, then we should release the pbuf in msg */
- if (cpcb->msg_head != NULL)
- {
- /* current_msg should be write_buf_msg */
- msg_write_buf *tmp_msg = cpcb->msg_head;
- while (tmp_msg != NULL)
- {
-
- forFree = MSG_ENTRY (tmp_msg, data_com_msg, buffer);
- spl_pbuf_free (tmp_msg->p);
- tmp_msg = tmp_msg->next;
-
- // free msg
- ASYNC_MSG_FREE (forFree);
- }
- cpcb->current_msg = NULL;
- cpcb->msg_head = cpcb->msg_tail = NULL;
- }
- }
- }
- else
- {
-
- }
-}
-
-/**
- * Setup a tcp_pcb with the correct callback function pointers
- * and their arguments.
- *
- * @param conn the TCP netconn to setup
- */
-NSTACK_STATIC void
-setup_tcp (struct tcp_pcb *pcb, spl_netconn_t * conn)
-{
- struct common_pcb *cpcb = (struct common_pcb *) conn->comm_pcb_data;
-
- /* callback have the same value as cpcb->conn */
- cpcb->conn = conn;
- tcp_arg (pcb, (void *) conn);
- tcp_recv (pcb, tcp_fn[TCP_FN_STACKX].recv_fn);
- tcp_sent (pcb, tcp_fn[TCP_FN_STACKX].sent_fn);
- tcp_poll (pcb, tcp_fn[TCP_FN_STACKX].poll_fn, 4);
- tcp_err (pcb, tcp_fn[TCP_FN_STACKX].err_fn);
-
-}
-
-/**
- * Accept callback function for TCP netconns.
- * Allocates a new netconn and posts that to conn->acceptmbox.
- *
- * @see tcp.h (struct tcp_pcb_listen.accept) for parameters and return value
- */
-err_t
-spl_accept_function (void *arg, struct tcp_pcb *newpcb, err_t err)
-{
- spl_netconn_t *newconn;
- spl_netconn_t *lconn = (spl_netconn_t *) arg; /* listen conneciton */
- struct common_pcb *cpcb = NULL;
-
- NSPOL_LOGDBG (API_MSG_DEBUG, "]state=%s",
- tcp_debug_state_str (newpcb->state));
-
- if (lconn == NULL)
- {
- NSPOL_LOGERR ("accept_function: conn is NULL");
- return ERR_VAL;
- }
-
- /* We have to set the callback here even though
- * the new socket is unknown. conn->socket is marked as -1. */
- newconn = ss_malloc_conn (lconn->conn_pool, SPL_NETCONN_TCP);
- if (newconn == NULL)
- {
- NSPOL_LOGERR ("conn alloc failed");
- return ERR_MEM;
- }
-
- cpcb = alloc_common_pcb (SPL_NETCONN_TCP);
- if (cpcb == NULL)
- {
- return ERR_MEM;
- }
-
- /* used by application to recycle conn */
- newconn->recycle.accept_from = lconn;
- newconn->conn_pool = lconn->conn_pool;
-
- newconn->recv_obj = (i64) & newconn->private_data;
- newconn->private_data = (i64) newpcb;
- newconn->comm_pcb_data = (i64) cpcb;
-
- NSFW_LOGINF ("alloc accept conn]conn=%p,pcb=%p,lconn=%p", newconn, newpcb,
- lconn);
- newconn->shut_status = 0xFFFF;
- newconn->last_err = ERR_OK;
- newconn->CanNotReceive = 0;
- newconn->flags = 0;
-
- newconn->state = SPL_NETCONN_NONE;
- newconn->mss = newpcb->mss;
- newconn->remote_ip.addr = newpcb->remote_ip.addr;
- newconn->remote_port = newpcb->remote_port;
- ss_set_local_ip (newconn, newpcb->local_ip.addr);
- ss_set_local_port (newconn, newpcb->local_port);
-
- setup_tcp (newpcb, newconn);
- newpcb->state = ESTABLISHED;
- update_tcp_state (newconn, ESTABLISHED);
-
- /*Initialize flow control variables */
- newconn->tcp_sndbuf = CONN_TCP_MEM_DEF_LINE;
- newconn->tcp_wmem_alloc_cnt = 0;
- newconn->tcp_wmem_sbr_free_cnt = 0;
- newconn->tcp_wmem_spl_free_cnt = 0;
- newconn->snd_buf = 0;
-
- newconn->bind_thread_index = lconn->bind_thread_index;
- ss_set_msg_box (newconn,
- ss_get_instance_msg_box (newconn->bind_thread_index, 0));
-
- /* no protection: when creating the pcb, the netconn is not yet known
- to the application thread */
- newconn->last_err = err;
-
- NSPOL_LOGDBG (TCP_DEBUG,
- "trypost]newconn=%p, tcp=%p state=%d conn state=%d ", newconn,
- newpcb, newpcb->state, newconn->state);
- if (accept_enqueue (lconn, (void *) newconn) != ERR_OK)
- {
- /* remove all references to this netconn from the pcb */
- NSPOL_LOGERR ("sp_enqueue!=ERR_OK]ring = %p", newconn->recv_ring);
-
- tcp_arg (newpcb, NULL);
- tcp_recv (newpcb, tcp_fn[TCP_FN_NULL].recv_fn);
- tcp_sent (newpcb, tcp_fn[TCP_FN_NULL].sent_fn);
- tcp_poll (newpcb, tcp_fn[TCP_FN_NULL].poll_fn, 0);
- tcp_err (newpcb, tcp_fn[TCP_FN_NULL].err_fn);
- /* drop conn */
- tcp_drop_conn (newconn);
- return ERR_MEM;
- }
-
- SPL_API_EVENT (lconn, SPL_NETCONN_EVT_ACCEPT, 1);
- /* tcp_accepted_with_return_value(newpcb); */
-
- return ERR_OK;
-}
-
-int
-common_pcb_init (struct common_pcb *cpcb)
-{
- // u32 threadnum = p_lwip_instance->rss_queue_id + 1;//0 for app
-
- cpcb->hostpid = get_sys_pid ();
-
- cpcb->socket = 0;
- /* run and close repeatly nstackmain coredum */
- cpcb->close_progress = 0;
- cpcb->model = SOCKET_STACKX;
- cpcb->current_msg = NULL;
- cpcb->msg_head = cpcb->msg_tail = NULL;
- cpcb->write_offset = 0;
-
- cpcb->recv_timeout = cpcb->send_timeout = 0;
-
- cpcb->sk_rcvlowat = 1;
-
- cpcb->l4_tick = 0;
- cpcb->dataSentFlag = 0;
- cpcb->recv_ring_not_empty = 0;
-
- return 0;
-}
-
-int
-common_pcb_reset (struct common_pcb *cpcb)
-{
- cpcb->conn = NULL;
- cpcb->hostpid = 0;
-
- cpcb->socket = 0;
- /* run and close repeatly nstackmain coredum */
- cpcb->close_progress = 0;
- cpcb->model = 0;
- cpcb->current_msg = NULL;
- cpcb->msg_head = cpcb->msg_tail = NULL;
- cpcb->write_offset = 0;
-
- cpcb->recv_timeout = cpcb->send_timeout = 0;
-
- cpcb->sk_rcvlowat = 0;
-
- cpcb->l4_tick = 0;
- cpcb->dataSentFlag = 0;
- cpcb->recv_ring_not_empty = 0;
-
- return 0;
-}
-
-void
-unlink_pcb (struct common_pcb *cpcb)
-{
- if (cpcb && cpcb->conn)
- {
- /* whatever the private data will be reset */
- cpcb->conn->private_data = 0;
- update_tcp_state (cpcb->conn, CLOSED);
- }
- else
- {
- NSPOL_LOGINF (API_MSG_DEBUG, "conn is detached already!");
- }
-}
-
-void
-unlink_recv_ring (spl_netconn_t * conn)
-{
- if (conn)
- conn->recv_ring_valid = 0;
-}
-
-void
-recycle_tmr (void *arg)
-{
- if (arg == NULL)
- {
- NSPOL_LOGERR ("recycle_message is NULL!");
- }
- else
- {
- (void) ss_recycle_conn (arg, do_try_delconn);
- }
-}
-
-/**
- * Create a new pcb of a specific type.
- * Called from do_newconn().
- *
- * @param msg the api_msg_msg describing the connection type
- * @return msg->conn->err, but the return value is currently ignored
- */
-int
-spl_pcb_new (msg_new_netconn * pmsg)
-{
- u16_t thread_index = spl_get_lcore_id ();
- struct common_pcb *cpcb = NULL;
- enum lwip_ip_addr_type iptype = IPADDR_TYPE_V4;
-
- /* Allocate a PCB for this connection */
- switch (SPL_NETCONNTYPE_GROUP (pmsg->type))
- {
- case SPL_NETCONN_UDP:
- {
- struct udp_pcb *u = udp_new_ip_type (iptype);
- if (u == NULL)
- {
- return ERR_MEM;
- }
-
- if (pmsg->type == SPL_NETCONN_UDPNOCHKSUM)
- {
- udp_setflags (u, UDP_FLAGS_NOCHKSUM);
- }
-
- cpcb = (struct common_pcb *) alloc_common_pcb (SPL_NETCONN_UDP);
- if (cpcb == NULL)
- {
- return ERR_MEM;
- }
-
- pmsg->conn->comm_pcb_data = (i64) cpcb;
- pmsg->conn->private_data = (i64) u;
- udp_recv (u, spl_recv_udp, (void *) pmsg->conn);
- break;
- }
-
- case SPL_NETCONN_TCP:
- {
- struct tcp_pcb *t = tcp_new_ip_type (iptype);
- if (t == NULL)
- {
- return ERR_MEM;
- }
-
- cpcb = alloc_common_pcb (SPL_NETCONN_TCP);
- if (cpcb == NULL)
- {
- return ERR_MEM;
- }
-
- pmsg->conn->comm_pcb_data = (i64) cpcb;
- pmsg->conn->private_data = (i64) t;
- setup_tcp (t, pmsg->conn);
- break;
- }
-
- default:
- /* Unsupported netconn type, e.g. protocol disabled */
- NSPOL_LOGERR ("Unsupported netconn type!");
- return ERR_VAL;
- }
-
- /* type and socket value for all type */
- cpcb->socket = pmsg->socket;
- cpcb->conn = pmsg->conn;
- cpcb->bind_thread_index = thread_index;
-
- /* used to find pcb when a msg is received */
- return ERR_OK;
-}
-
-/**
- * Delete rcvmbox and acceptmbox of a netconn and free the left-over data in
- * these mboxes
- *
- * @param conn the netconn to free
- * @bytes_drained bytes drained from recvmbox
- * @accepts_drained pending connections drained from acceptmbox
- */
-int
-netconn_drain (enum spl_netconn_type type, spl_netconn_t * conn)
-{
- int i, n;
- mring_handle ring = NULL;
- void *addr[32] = { 0 };
- int not_empty = 0;
-
- /* This runs in tcpip_thread, so we don't need to lock against rx packets */
- ring = conn->recv_ring;
- do
- {
- /*every times get atmost 32 to release */
- n = nsfw_mem_ring_dequeuev (ring, addr, 32);
- for (i = 0; i < n; i++)
- {
- /* if the con is UDP, buffer type also is struct spl_netbuf,it is same as RAW */
- if ((type == SPL_NETCONN_RAW) || (type == SPL_NETCONN_UDP))
- {
- spl_pbuf_free ((struct spl_pbuf *) addr[i]);
- if (type == SPL_NETCONN_UDP)
- {
- UDP_STATS_INC (udp.drop);
- }
- }
- else
- {
- spl_pbuf_free ((struct spl_pbuf *) addr[i]);
- }
-
- if (not_empty == 0)
- not_empty = 1;
- }
- }
- while (0 != n);
- return not_empty;
-}
-
-/* need free mbuf inside recv ring before free conn */
-void
-free_conn_by_spl (spl_netconn_t * conn)
-{
- struct common_pcb *cpcb = (struct common_pcb *) conn->comm_pcb_data;
-
- free_common_pcb (cpcb);
-
- (void) netconn_drain (conn->type, conn);
- ss_free_conn (conn);
-}
-
-int
-do_close_finished (struct common_pcb *cpcb, u8_t close_finished, u8_t shut,
- err_t err, int OpShutDown)
-{
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
- spl_netconn_t *conn = cpcb->conn;
-
- if (!close_finished)
- {
- /* Closing succeeded */
- /* Closing failed, restore some of the callbacks */
- /* Closing of listen pcb will never fail! */
- if (LISTEN == tpcb->state)
- {
- NSPOL_LOGERR ("Closing a listen pcb may not fail!");
- return ERR_VAL;
- }
-
- tcp_sent (tpcb, tcp_fn[TCP_FN_STACKX].sent_fn);
- tcp_poll (tpcb, tcp_fn[TCP_FN_STACKX].poll_fn, 1);
- tcp_err (tpcb, tcp_fn[TCP_FN_STACKX].err_fn);
- tcp_arg (tpcb, conn);
- /* don't restore recv callback: we don't want to receive any more data */
- }
- else
- {
- /* Closing done (succeeded, non-memory error, nonblocking error or timeout) */
- if (cpcb->current_msg)
- {
- SET_MSG_ERR (cpcb->current_msg, err);
- cpcb->current_msg = NULL;
- }
-
- conn->state = SPL_NETCONN_NONE;
- NSTCP_LOGINF ("release pcb]conn=%p,pcb=%p", conn, tpcb);
- unlink_pcb (cpcb);
- }
-
- return ERR_OK;
-}
-
-NSTACK_STATIC void
-reset_tcp_callback (struct tcp_pcb *tpcb, struct common_pcb *cpcb, u8 shut)
-{
- spl_netconn_t *conn = cpcb->conn;
-
- /* some callbacks have to be reset if tcp_close is not successful */
- if (shut & SPL_NETCONN_SHUT_RD)
- {
- conn->CanNotReceive = 1;
- tcp_recv (tpcb, tcp_fn[TCP_FN_NULL].recv_fn);
- tcp_accept (tpcb, tcp_fn[TCP_FN_NULL].accept_fn);
- }
-
- if (shut & SPL_NETCONN_SHUT_WR)
- {
- tcp_sent (tpcb, tcp_fn[TCP_FN_NULL].sent_fn);
- }
-
- if (shut == SPL_NETCONN_SHUT_RDWR)
- {
- tcp_poll (tpcb, tcp_fn[TCP_FN_NULL].poll_fn, 0);
- tcp_err (tpcb, tcp_fn[TCP_FN_NULL].err_fn);
- }
-}
-
-/**
- * Internal helper function to close a TCP netconn: since this sometimes
- * doesn't work at the first attempt, this function is called from multiple
- * places.
- *
- * @param conn the TCP netconn to close
- */
-err_t
-do_close_internal (struct common_pcb *cpcb, int OpShutDown)
-{
- err_t err;
- u8_t shut, ucclose;
- u8_t close_finished = 0;
-
- if (NULL == cpcb)
- {
- NSTCP_LOGERR ("invalid conn");
- return ERR_ARG;
- }
-
- spl_netconn_t *conn = cpcb->conn;
- if (SPL_NETCONN_TCP != cpcb->type || SPL_NETCONN_CLOSE != conn->state)
- {
- NSTCP_LOGERR ("conn=%p, err_type=%d, error_state=%d",
- conn, cpcb->type, conn->state);
- return ERR_VAL;
- }
-
- struct tcp_pcb *tpcb = (struct tcp_pcb *) (conn->private_data);
-
- if (cpcb->current_msg != NULL)
- shut = get_shut_op (cpcb->current_msg);
- else
- shut = SPL_NETCONN_SHUT_RDWR;
-
- /* shutting down both ends is the same as closing */
- ucclose = (shut == SPL_NETCONN_SHUT_RDWR);
-
- /* Set back some callback pointers */
- if (ucclose)
- {
- conn->CanNotReceive = 1;
- tcp_arg (tpcb, conn);
- }
-
- if (tpcb->state == LISTEN)
- {
- tcp_accept (tpcb, tcp_fn[TCP_FN_NULL].accept_fn);
- }
- else
- {
- reset_tcp_callback (tpcb, cpcb, shut);
- }
-
- /* Try to close the connection */
- if (shut == SPL_NETCONN_SHUT_RDWR && !OpShutDown)
- {
- err = tcp_close (tpcb);
- }
- else
- {
- err =
- tcp_shutdown (tpcb, shut & SPL_NETCONN_SHUT_RD,
- shut & SPL_NETCONN_SHUT_WR);
- }
-
- if (err == ERR_OK)
- {
- close_finished = 1;
- }
- else
- {
- if (err == ERR_MEM)
- {
- /* Blocking close, check the timeout */
- close_finished = 1;
- if (ucclose)
- {
- /* in this case, we want to RST the connection */
- tcp_abort (tpcb);
- err = ERR_OK;
- }
- }
- else
- {
- /* Closing failed for a non-memory error: give up */
- close_finished = 1;
- }
- }
-
- err_t err1 = do_close_finished (cpcb, close_finished,
- shut, err, OpShutDown);
- if (err1 != ERR_OK)
- {
- NSTCP_LOGERR ("return err1]pcb=%p,err1=%d", tpcb, err1);
- return err1;
- }
- return err;
-
- /* If closing didn't succeed, we get called again either
- from poll_tcp or from sent_tcp */
-}
-
-void
-do_try_delconn (void *close_data, u32 delay_sec)
-{
- msg_delete_netconn *dmsg = (msg_delete_netconn *) close_data;
- data_com_msg *m = MSG_ENTRY (dmsg, data_com_msg, buffer);
- struct common_pcb *cpcb = NULL;
-
- spl_netconn_t *conn = dmsg->conn;
-
- /* no receiver in some recycle cases */
- if (0 == m->param.comm_receiver)
- {
- if (NULL == conn)
- {
- NSFW_LOGERR ("release err conn!]pid=%d", dmsg->pid);
- /* need to free pbufs which are attached to msg */
- do_pbuf_free (dmsg->buf);
- return;
- }
-
- cpcb = (struct common_pcb *) conn->comm_pcb_data;
- }
- else
- {
- cpcb = COMM_PRIVATE_PTR (m);
- }
-
- /* no pcb in some recycle cases */
- if (conn->private_data == 0)
- {
- /* though pcb is gone, still need to clean the mbox */
- if (conn != NULL)
- (void) netconn_drain (conn->type, conn);
-
- NSFW_LOGWAR ("release conn pcb null]pcb=%p", m->param.receiver);
- /* need to free pbufs which are attached to msg */
- do_pbuf_free (dmsg->buf);
- return;
- }
-
- if (delay_sec)
- {
- NSFW_LOGWAR ("delay to recycle!]pcb=%p, msg=%d", cpcb, dmsg);
- sys_timeout (delay_sec * 1000, recycle_tmr, dmsg);
- return;
- }
-
- do_delconn (cpcb, dmsg);
-
- /* after the do_delconn, the PCB maybe released, but the conn is ok */
- sys_sem_s_signal (&dmsg->conn->close_completed);
-
- return;
-}
-
-/**
- * Delete the pcb inside a netconn.
- * Called from netconn_delete.
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_delconn (struct common_pcb *cpcb, msg_delete_netconn * dmsg)
-{
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *pmsg = MSG_ENTRY (dmsg, data_com_msg, buffer);
-
- /*if already close, just return */
- /* run and close repeatly nstackmain coredum */
- if (1 == cpcb->close_progress)
- {
- SET_MSG_ERR (pmsg, ERR_OK);
- return;
- }
- cpcb->close_progress = 1;
-
- /* Pbuf free should be done in network stack */
- do_pbuf_free (dmsg->buf);
-
- /* @todo TCP: abort running write/connect? */
- if ((conn->state != SPL_NETCONN_NONE)
- && (conn->state != SPL_NETCONN_LISTEN)
- && (conn->state != SPL_NETCONN_CONNECT))
- {
- /* this only happens for TCP netconns */
- if (SPL_NETCONN_TCP != cpcb->type)
- {
- NSTCP_LOGERR ("msg->conn->type error!]conn=%p,msg->conn->type=%d",
- conn, cpcb->type);
- SET_MSG_ERR (pmsg, ERR_VAL);
- return;
- }
- NSPOL_LOGINF (SOCK_INFO, "conn is not for free state]conn=%p,state=%d",
- conn, conn->state);
-
- //need to release pcb
- if (cpcb->current_msg != NULL && cpcb->msg_tail != NULL)
- {
- NSPOL_LOGINF (SOCK_INFO,
- "conn there is data in conn->current_msg when close the conn]conn=%p,state=%d",
- conn, conn->state);
- (void) do_writemore (cpcb->conn);
- }
- }
-
- /*
- the accpet connections waiting in listen queue will be clear in
- netconn_drain.
- */
- if (conn->state == SPL_NETCONN_LISTEN)
- {
- /* This function does nothing in original code. */
- }
- else
- {
- /* Drain pbuf from non-listen mboxes */
- if (netconn_drain (cpcb->type, conn))
- {
- cpcb->recv_ring_not_empty = 1;
-
- NSPOL_LOGWAR (SOCK_INFO,
- "still some data leave in recv ring when close");
- }
- }
-
- /* conn will be released outside */
-
- switch (SPL_NETCONNTYPE_GROUP (cpcb->type))
- {
-
- case SPL_NETCONN_UDP:
- {
- struct udp_pcb *upcb = (struct udp_pcb *) cpcb->conn->private_data;
- upcb->recv_arg = NULL;
- udp_remove (upcb);
- break;
- }
-
- case SPL_NETCONN_TCP:
- {
- conn->state = SPL_NETCONN_CLOSE;
- dmsg->shut = SPL_NETCONN_SHUT_RDWR;
- cpcb->current_msg = pmsg;
-
- if (ERR_INPROGRESS == do_close_internal (cpcb, 0))
- {
- return;
- }
- }
- default:
- break;
- }
-
- /* tcp netconns don't come here! */
-
-}
-
-/**
- * Bind a pcb contained in a netconn
- * Called from netconn_bind.
- *
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IPaddress and port to bind to
- */
-void
-do_bind (struct common_pcb *cpcb, msg_bind * bmsg)
-{
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *pmsg = MSG_ENTRY (bmsg, data_com_msg, buffer);
- ip_addr_t stIpaddr;
-
- stIpaddr.addr = bmsg->ipaddr.addr;
-
- if (SPL_ERR_IS_FATAL (conn->last_err)
- && ERR_CANTASSIGNADDR != conn->last_err)
- {
- NSTCP_LOGERR ("bind but conn has err]pcb=%p,conn=%p,err=%d", cpcb, conn,
- conn->last_err);
- SET_MSG_ERR (pmsg, conn->last_err);
- }
- else
- {
- if (!ip_addr_isany (&bmsg->ipaddr)
- && !ip_addr_ismulticast (&bmsg->ipaddr))
- {
- if (!get_netif_by_ip (bmsg->ipaddr.addr)
- && !netif_check_broadcast_addr (&bmsg->ipaddr))
- {
- NSPOL_LOGERR ("ip is not exist]pcb=%p,ip=%u", cpcb,
- bmsg->ipaddr.addr);
- SET_MSG_ERR (pmsg, ERR_CANTASSIGNADDR);
- return;
- }
- }
-
- SET_MSG_ERR (pmsg, ERR_VAL);
- switch (SPL_NETCONNTYPE_GROUP (cpcb->type))
- {
- case SPL_NETCONN_UDP:
- SET_MSG_ERR (pmsg,
- udp_bind ((struct udp_pcb *) (cpcb->
- conn->private_data),
- &stIpaddr, bmsg->port));
-
- /* Set local Ip, willbe used during connect */
- struct udp_pcb *upcb = (struct udp_pcb *) cpcb->conn->private_data;
- ss_set_local_ip (cpcb->conn, upcb->local_ip.addr);
- ss_set_local_port (cpcb->conn, upcb->local_port);
- NSTCP_LOGINF ("updated Ip to spl_netconn_t] %x",
- upcb->local_ip.addr);
-
- NSUDP_LOGINF
- ("udp_bind return]pcb=%p,IP=%u.%u.%u.%u,port=%u,err=%d",
- (struct udp_pcb *) cpcb->conn->private_data,
- &bmsg->ipaddr == NULL ? 0 : ip4_addr1_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr2_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr3_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr4_16 (&stIpaddr), bmsg->port,
- GET_MSG_ERR (pmsg));
- break;
-
- case SPL_NETCONN_TCP:
- SET_MSG_ERR (pmsg,
- tcp_bind ((struct tcp_pcb *) cpcb->conn->private_data,
- &stIpaddr, bmsg->port));
-
- /* Set local Ip, willbe used during connect */
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
- NSTCP_LOGINF ("updated Ip to spl_netconn_t] %x",
- tpcb->local_ip.addr);
- ss_set_local_ip (cpcb->conn, tpcb->local_ip.addr);
- ss_set_local_port (cpcb->conn, tpcb->local_port);
-
- NSTCP_LOGINF
- ("tcp_bind return]pcb=%p,IP=%u.%u.%u.%u,port=%u,err=%d",
- (struct tcp_pcb *) cpcb->conn->private_data,
- &bmsg->ipaddr == NULL ? 0 : ip4_addr1_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr2_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr3_16 (&stIpaddr),
- &bmsg->ipaddr == NULL ? 0 : ip4_addr4_16 (&stIpaddr), bmsg->port,
- GET_MSG_ERR (pmsg));
- break;
- default:
- break;
- }
- }
-
- conn->last_err = GET_MSG_ERR (pmsg);
- NSPOL_LOGDBG (TESTSOCKET_DEBUG | LWIP_DBG_TRACE, "the msg is doing bind");
- NSTCP_LOGINF ("the msg is doing bind");
-}
-
-/**
- * TCP callback function if a connection (opened by tcp_connect/do_connect) has
- * been established (or reset by the remote host).
- *
- * @see tcp.h (struct tcp_pcb.connected) for parameters and return values
- */
-err_t
-spl_do_connected (void *arg, struct tcp_pcb *pcb, err_t err)
-{
- spl_netconn_t *conn = (spl_netconn_t *) arg;
- struct common_pcb *cpcb = (struct common_pcb *) conn->comm_pcb_data;
- data_com_msg *m = cpcb->current_msg;
- int was_blocking;
-
- if (conn == NULL)
- {
- NSTCP_LOGERR ("conn is NULL!]arg=%p", arg);
- return ERR_ARG;
- }
-
- if (SPL_NETCONN_CONNECT != conn->state)
- {
- NSTCP_LOGERR ("conn->state error!]conn=%p,state=%d", conn, conn->state);
- return ERR_VAL;
- }
-
- if ((NULL == m) && (0 == spl_netconn_is_nonblocking (conn)))
- {
- NSTCP_LOGERR ("conn->current_msg!]conn=%p,current_msg=%p", conn, m);
- return ERR_VAL;
- }
-
- if (m != NULL)
- {
- SET_MSG_ERR (m, err);
- }
-
- if ((cpcb->type == SPL_NETCONN_TCP) && (err == ERR_OK))
- {
- setup_tcp (pcb, conn);
- }
-
- ss_set_local_ip (conn, pcb->local_ip.addr);
- ss_set_local_port (conn, pcb->local_port);
- conn->remote_ip.addr = pcb->remote_ip.addr;
- conn->remote_port = pcb->remote_port;
-
- conn->mss = pcb->mss;
- cpcb->current_msg = NULL;
-
- was_blocking = !SPL_IN_NONBLOCKING_CONNECT (conn);
- SPL_SET_NONBLOCKING_CONNECT (conn, 0);
- conn->state = SPL_NETCONN_NONE;
- SPL_NETCONN_SET_SAFE_ERR (conn, ERR_OK);
-
- update_tcp_state (pcb->callback_arg, ESTABLISHED);
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_SENDPLUS, 1);
-
- if (was_blocking && m != NULL)
- {
- SYNC_MSG_ACK (m);
- }
-
- return ERR_OK;
-}
-
-int
-do_internal_tcp_connect (struct common_pcb *cpcb, struct tcp_pcb *tpcb,
- msg_connect * cmsg)
-{
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *pmsg = MSG_ENTRY (cmsg, data_com_msg, buffer);
- ip_addr_t ip_addr;
-
- ip_addr.addr = cmsg->ipaddr.addr;
-
- /* Prevent connect while doing any other action. */
- if (conn->state != SPL_NETCONN_NONE)
- {
- if (conn->state == SPL_NETCONN_CONNECT
- || conn->state == SPL_NETCONN_WRITE)
- {
- if (tpcb->state != ESTABLISHED)
- {
- SET_MSG_ERR (pmsg, ERR_ALREADY);
- }
- else
- {
- SET_MSG_ERR (pmsg, ERR_ISCONN);
- }
- }
- else
- {
- SET_MSG_ERR (pmsg, ERR_ISCONN);
- }
-
- NSTCP_LOGINF
- ("tcp_connect]pcb=%p,state=%d,remote_ip=%u.%u.%u.%u,remote_port=%u,local_ip=%u.%u.%u.%u,local_port=%u,err=%d",
- tpcb, conn->state, ip4_addr1_16 (&ip_addr), ip4_addr2_16 (&ip_addr),
- ip4_addr3_16 (&ip_addr), ip4_addr4_16 (&ip_addr), cmsg->port,
- ip4_addr1_16 (&tpcb->local_ip), ip4_addr2_16 (&tpcb->local_ip),
- ip4_addr3_16 (&tpcb->local_ip), ip4_addr4_16 (&tpcb->local_ip),
- tpcb->local_port, GET_MSG_ERR (pmsg));
- }
- else
- {
- setup_tcp (tpcb, conn);
- SET_MSG_ERR (pmsg,
- tcp_connect (tpcb, &ip_addr, cmsg->port,
- tcp_fn[TCP_FN_STACKX].connected_fn));
- conn->mss = tpcb->mss;
- SPL_API_EVENT (conn, NETCONN_EVT_SENDMINUS, 1);
- SPL_API_EVENT (conn, NETCONN_EVT_RCVMINUS, 1);
-
- NSTCP_LOGINF
- ("tcp_connect]pcb=%p,state=%d,remote_ip=%u.%u.%u.%u,remote_port=%u,local_ip=%u.%u.%u.%u,local_port=%u,err=%d",
- tpcb, conn->state, ip4_addr1_16 (&ip_addr), ip4_addr2_16 (&ip_addr),
- ip4_addr3_16 (&ip_addr), ip4_addr4_16 (&ip_addr), cmsg->port,
- ip4_addr1_16 (&tpcb->local_ip), ip4_addr2_16 (&tpcb->local_ip),
- ip4_addr3_16 (&tpcb->local_ip), ip4_addr4_16 (&tpcb->local_ip),
- tpcb->local_port, GET_MSG_ERR (pmsg));
- if (GET_MSG_ERR (pmsg) == ERR_OK)
- {
- int nonblock = spl_netconn_is_nonblocking (conn);
- SPL_SET_NONBLOCKING_CONNECT (conn, nonblock);
- conn->state = SPL_NETCONN_CONNECT;
- if (nonblock)
- {
- SET_MSG_ERR (pmsg, ERR_INPROGRESS);
- }
- else
- {
- cpcb->current_msg = pmsg;
- /* sys_sem_signal() is called from do_connected (or err_tcp()),
- * when the connection is established! */
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-/**
- * Connect a pcb contained inside a netconn
- * Called from netconn_connect.
- *
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IPaddress and port to connect to
- */
-void
-do_connect (struct common_pcb *cpcb, msg_connect * cmsg)
-{
- data_com_msg *pmsg = MSG_ENTRY (cmsg, data_com_msg, buffer);
- ip_addr_t ipaddr;
-
- SET_MSG_ERR (pmsg, ERR_OK);
-
- if (cpcb == NULL)
- {
- /* This may happen when calling netconn_connect() a second time */
- NSTCP_LOGERR ("conn connect but conn has err]msg=%p", pmsg);
- SET_MSG_ERR (pmsg, ERR_CLSD);
- return;
- }
-
- ipaddr.addr = cmsg->ipaddr.addr;
- switch (SPL_NETCONNTYPE_GROUP (cpcb->type))
- {
- case SPL_NETCONN_UDP:
- {
- struct udp_pcb *upcb = (struct udp_pcb *) (cpcb->conn->private_data);
- if (ip_addr_isany (&upcb->local_ip))
- {
- upcb->local_ip.addr = cmsg->local_ip.addr;
- ss_set_local_ip (cpcb->conn, upcb->local_ip.addr);
- }
-
- SET_MSG_ERR (pmsg, udp_connect (upcb, &ipaddr, cmsg->port));
- if (ERR_OK == pmsg->param.err)
- {
- cpcb->conn->remote_ip.addr = cmsg->ipaddr.addr;
- cpcb->conn->remote_port = cmsg->port;
- }
- break;
- }
- case SPL_NETCONN_TCP:
- {
- struct tcp_pcb *tpcb = (struct tcp_pcb *) (cpcb->conn->private_data);
- if (ip_addr_isany (&tpcb->local_ip))
- {
- tpcb->local_ip.addr = cmsg->local_ip.addr;
- ss_set_local_ip (cpcb->conn, tpcb->local_ip.addr);
- }
-
- if (0 != do_internal_tcp_connect (cpcb, tpcb, cmsg))
- {
- return;
- }
-
- }
- break;
- default:
- NSPOL_LOGERR ("Invalid netconn type]type=%d", cpcb->type);
- SET_MSG_ERR (pmsg, ERR_VAL);
- break;
- }
-
- /* For all other protocols, netconn_connect() calls TCPIP_APIMSG(),
- so use TCPIP_APIMSG_ACK() here.
- Do as lwip-2.0.0. set conn->last_error here. */
- SPL_NETCONN_SET_SAFE_ERR (cpcb->conn, GET_MSG_ERR (pmsg));
-}
-
-/* Pbuf free should be done in network stack */
-void
-do_pbuf_free (struct spl_pbuf *buf)
-{
- if (buf)
- {
- struct spl_pbuf *pCur = buf;
- while (buf)
- {
- pCur = buf;
- buf = buf->freeNext;
- spl_pbuf_free (pCur);
- }
- }
-}
-
-/**
- * Set a TCP pcb contained in a netconn into listen mode
- * Called from netconn_listen.
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_listen (struct common_pcb *cpcb, msg_listen * lmsg)
-{
- err_t err = ERR_OK;
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *pmsg = MSG_ENTRY (lmsg, data_com_msg, buffer);
-
- if (SPL_ERR_IS_FATAL (conn->last_err))
- {
- NSTCP_LOGERR ("conn listern but conn has err]conn=%p,err=%d",
- conn, conn->last_err);
- SET_MSG_ERR (pmsg, conn->last_err);
- }
- else
- {
- SET_MSG_ERR (pmsg, ERR_CONN);
-
- if (cpcb->type == SPL_NETCONN_TCP)
- {
- if (conn->state == SPL_NETCONN_NONE)
- {
- struct tcp_pcb *lpcb;
- if (((struct tcp_pcb *) (cpcb->conn->private_data))->state !=
- CLOSED)
- {
- /* connection is not closed, cannot listen */
- SET_MSG_ERR (pmsg, ERR_VAL);;
- }
- else
- {
- u8_t backlog = TCP_DEFAULT_LISTEN_BACKLOG;
-
- lpcb =
- tcp_listen_with_backlog_and_err ((struct tcp_pcb
- *) (cpcb->
- conn->private_data),
- backlog, &err);
- if (lpcb == NULL)
- {
- /* in this case, the old pcb is still allocated */
- SET_MSG_ERR (pmsg, err);
- }
- else
- {
- SET_MSG_ERR (pmsg, ERR_OK);
- /* conn now is put on lpcb */
- conn->state = SPL_NETCONN_LISTEN;
-
- /* NOTE: pmsg->conn->comm_pcb_data == (i64)cpcb; should be already same. */
- conn->private_data = (i64) lpcb;
-
- tcp_arg (lpcb, conn);
- tcp_accept (lpcb, tcp_fn[TCP_FN_STACKX].accept_fn);
-
- SPL_API_EVENT (conn, NETCONN_EVT_SENDMINUS, 1);
- SPL_API_EVENT (conn, NETCONN_EVT_RCVMINUS, 1);
- }
- }
- }
- else if (conn->state == SPL_NETCONN_LISTEN)
- {
- SET_MSG_ERR (pmsg, ERR_OK);
- }
- }
- NSTCP_LOGINF ("listen]conn=%p,pcb=%p,connstate=%d,err=%d",
- conn, cpcb, conn->state, GET_MSG_ERR (pmsg));
-
- }
-
-}
-
-/**
- * Send some data on UDP pcb contained in a netconn
- * Called from do_send
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-spl_udp_send (struct common_pcb *cpcb, msg_send_buf * smsg)
-{
- struct spl_pbuf *p_from = smsg->p;
- spl_netconn_t *conn = cpcb->conn;
- struct udp_pcb *upcb = (struct udp_pcb *) (cpcb->conn->private_data);
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
- struct pbuf *p_to = NULL;
- err_t err = ERR_OK;
-
- //allocate pbuf and copy spl_pbuf, send , free pbuf and spl_pbuf
- do
- {
- p_to = pbuf_alloc (PBUF_TRANSPORT, p_from->len, PBUF_RAM);
- if (NULL == p_to)
- {
- NSPOL_LOGERR ("pbuf is NULL]conn=%p,pcb=%p", conn, upcb);
- return;
- }
-
- err = splpbuf_to_pbuf_transport_copy (p_to, p_from);
- if (err != ERR_OK)
- {
- SET_MSG_ERR (m, conn->last_err);
- return;
- }
-
- if (ip_addr_isany (&smsg->addr))
- {
- SET_MSG_ERR (m, udp_send (upcb, p_to));
- }
- else
- {
- SET_MSG_ERR (m,
- udp_sendto (upcb, p_to, (ip_addr_t *) & smsg->addr,
- smsg->port));
- }
-
- p_from = (struct spl_pbuf *) ADDR_SHTOL (p_from->next_a);
- }
- while (p_from != NULL);
-
-}
-
-/**
- * Send some data on a RAW or UDP pcb contained in a netconn
- * Called from netconn_send
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_send (struct common_pcb *cpcb, msg_send_buf * smsg)
-{
- struct spl_pbuf *p = smsg->p;
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
- spl_netconn_t *conn = cpcb->conn;
-
- pbuf_set_recycle_flg (p, MBUF_HLD_BY_SPL); /* release buf hold by app on abnormal exit */
-
- if (SPL_ERR_IS_FATAL (conn->last_err))
- {
- SET_MSG_ERR (m, conn->last_err);
- NSPOL_LOGERR ("Invalid param]msg->conn=%p", conn);
- goto err_return;
- }
-
- switch (SPL_NETCONNTYPE_GROUP (cpcb->type))
- {
- case SPL_NETCONN_UDP:
- {
- struct udp_pcb *upcb = (struct udp_pcb *) (cpcb->conn->private_data);
- if (ip_addr_isany (&upcb->local_ip))
- {
- upcb->local_ip.addr = smsg->local_ip.addr;
- ss_set_local_ip (conn, smsg->local_ip.addr);
- }
-
- spl_udp_send (cpcb, smsg);
-
- break;
- }
-
- default:
- SET_MSG_ERR (m, ERR_CONN);
- break;
- }
-
-err_return:
- pbuf_free_safe (smsg->p);
- ASYNC_MSG_FREE (m);
-
- return;
-}
-
-/**
- * Indicate data has been received from a TCP pcb contained in a netconn
- * Called from netconn_recv
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_recv (struct common_pcb *cpcb, msg_recv_buf * rmsg)
-{
- data_com_msg *m = MSG_ENTRY (rmsg, data_com_msg, buffer);
- SET_MSG_ERR (m, ERR_OK);
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
-
- if (NULL == tpcb)
- {
- if (rmsg->p)
- {
- NSPOL_LOGDBG (TCP_DEBUG,
- "When pcb was freed: do recv, and free pbuf");
- spl_pbuf_free (rmsg->p);
- rmsg->p = NULL;
- }
-
- return;
- }
-
- if (cpcb->conn->type == SPL_NETCONN_TCP)
- {
- /* Pbuf free should be done in network stack */
- if (rmsg->p)
- {
- NSPOL_LOGDBG (TCP_DEBUG, "do recv, and free pbuf");
- spl_pbuf_free (rmsg->p);
- rmsg->p = NULL;
- }
- tcp_recved (tpcb, rmsg->len * TCP_MSS);
- }
-}
-
-/**
- * See if more data needs to be written from a previous call to netconn_write.
- * Called initially from do_write. If the first call can't send all data
- * (because of low memory or empty send-buffer), this function is called again
- * from sent_tcp() or poll_tcp() to send more data. If all data is sent, the
- * blocking application thread (waiting in netconn_write) is released.
- *
- * @param conn netconn (that is currently in state NETCONN_WRITE) to process
- * @return ERR_OK
- * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished
- */
-
-/**
- * See if more data needs to be written from a previous call to netconn_write.
- * Called initially from do_write. If the first call can't send all data
- * (because of low memory or empty send-buffer), this function is called again
- * from sent_tcp() or poll_tcp() to send more data. If all data is sent, the
- * blocking application thread (waiting in netconn_write) is released.
- *
- * @param conn netconn (that is currently in state NETCONN_WRITE) to process
- * @return ERR_OK
- * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished
- */
-err_t
-do_writemore (struct spl_netconn *conn)
-{
- err_t err = ERR_OK;
- u16_t len = 0, available;
- u8_t write_finished = 0;
- struct tcp_pcb *tpcb = (struct tcp_pcb *) conn->private_data;
- common_pcb *cpcb = (struct common_pcb *) conn->comm_pcb_data;
- size_t diff;
- const void *dataptr;
-
- if ((NULL == tpcb) || (NULL == conn) || (SPL_NETCONN_WRITE != conn->state)
- || (NULL == cpcb->current_msg))
- {
- NSPOL_LOGERR ("conn=NULL");
- return ERR_ARG;
- }
-
- msg_write_buf *wmsg = (msg_write_buf *) cpcb->current_msg->buffer;
-start_write:
-
- if (NULL == wmsg->p)
- {
- NSPOL_LOGERR ("wmsg->p is NULL]conn=%p,pcb=%p", conn, tpcb);
- return ERR_VAL;
- }
-
- u8_t apiflags = wmsg->apiflags;
- struct spl_pbuf *current_w_pbuf = wmsg->p;
- current_w_pbuf->res_chk.u8Reserve |= NEED_ACK_FLAG;
- wmsg->p = current_w_pbuf->next;
- current_w_pbuf->next = NULL;
-
- dataptr = (const u8_t *) current_w_pbuf->payload + cpcb->write_offset;
- diff = current_w_pbuf->len - cpcb->write_offset;
-
- if (diff > 0xffffUL)
- {
- len = 0xffff;
- apiflags |= TCP_WRITE_FLAG_MORE;
- }
- else
- {
- len = (u16_t) diff;
- }
-
- available = tcp_sndbuf (tpcb);
- if (!available)
- {
- err = ERR_MEM;
- goto err_mem;
- }
-
- if (available < len)
- {
- /* don't try to write more than sendbuf */
- len = available;
- apiflags |= TCP_WRITE_FLAG_MORE;
- }
-
- err = tcp_write (tpcb, dataptr, len, apiflags);
- if ((err == ERR_OK) || (err == ERR_MEM))
- {
- err_mem:
- if ((tcp_sndbuf (tpcb) <= TCP_SNDLOWAT) ||
- (tcp_sndqueuelen (tpcb) >= TCP_SNDQUEUELOWAT))
- {
- SPL_API_EVENT (conn, NETCONN_EVT_SENDMINUS, 1);
- }
- }
- if (err == ERR_OK)
- {
- cpcb->write_offset += len;
- tcp_output (tpcb);
-
- if (cpcb->write_offset == current_w_pbuf->len)
- {
- cpcb->write_offset = 0;
- spl_pbuf_free (current_w_pbuf);
- if (NULL == wmsg->p)
- {
- /* this message is finished */
- cpcb->write_offset = 0;
- SET_MSG_ERR (cpcb->current_msg, err);
-
- /* go to next msg */
- data_com_msg *forFreemsg = cpcb->current_msg;
- msg_write_buf *msg_head_prev = cpcb->msg_head;
- cpcb->msg_head = cpcb->msg_head->next;
-
- /* no msg remain */
- if (cpcb->msg_head == NULL)
- {
- write_finished = 1;
- if (cpcb->msg_tail != NULL
- && msg_head_prev != cpcb->msg_tail)
- {
- NSPOL_LOGWAR (TCP_DEBUG,
- "err maybe lost one mesg]conn=%p,pcb=%p",
- conn, tpcb);
- }
- cpcb->msg_tail = NULL;
- cpcb->current_msg = NULL;
- conn->state = SPL_NETCONN_NONE;
- }
- else /* go to handle next message */
- {
-
- cpcb->current_msg =
- MSG_ENTRY (cpcb->msg_head, data_com_msg, buffer);
- wmsg = cpcb->msg_head;
- write_finished = 0;
- }
-
- ASYNC_MSG_FREE (forFreemsg);
- }
-
- }
- else
- {
- if (cpcb->write_offset > current_w_pbuf->len)
- {
- NSPOL_LOGERR ("Big trouble write_offset > current_w_pbuf->len");
- }
-
- current_w_pbuf->next = wmsg->p;
- wmsg->p = current_w_pbuf;
- }
- if ((write_finished == 0) && (NULL != wmsg->p))
- {
- goto start_write;
- }
- }
- else if (err == ERR_MEM)
- {
- current_w_pbuf->next = wmsg->p;
- wmsg->p = current_w_pbuf;
- tcp_output (tpcb);
- }
- else
- {
- NSPOL_LOGERR ("]pcb=%p, error when send %d", tpcb, err);
- write_finished = 1;
- cpcb->write_offset = 0;
- current_w_pbuf->next = wmsg->p;
- wmsg->p = current_w_pbuf;
- tcp_abort (tpcb);
- return err;
- }
- NSTCP_LOGINF ("do_writemore finished with err %d", err);
- return ERR_OK;
-}
-
-/**
- * Send some data on a TCP pcb contained in a netconn
- * Called from netconn_write
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_write (struct common_pcb *cpcb, msg_write_buf * wmsg)
-{
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *m = MSG_ENTRY (wmsg, data_com_msg, buffer);
-
- pbuf_set_recycle_flg (wmsg->p, MBUF_HLD_BY_SPL); /* release buf hold by app on abnormal exit */
-
- int tcpState = -1;
-
- /* if msg->conn is null, then return */
- if (NULL == conn)
- {
- NSPOL_LOGERR ("Invalid param]msg->conn=%p", conn);
- SET_MSG_ERR (m, ERR_VAL);
- goto err_return;
- }
-
- tcpState = tpcb->state;
-
- if ((SPL_ERR_IS_FATAL (conn->last_err))
- && !((ERR_CLSD == conn->last_err) && (CLOSE_WAIT == tcpState)))
- {
- SET_MSG_ERR (m, conn->last_err);
- }
- else
- {
- if (cpcb->type == SPL_NETCONN_TCP)
- {
- if (cpcb->current_msg != NULL)
- {
- if (NULL == cpcb->msg_head || NULL == cpcb->msg_tail)
- {
- /* if possible only if connect is not finished and it's
- blocking, then the current_msg is connect msg.
- */
- NSPOL_LOGERR ("netconn do_write msg is null]msg_type=%d",
- cpcb->current_msg->param.minor_type);
- goto err_return;
- }
-
- /* only msg_write_buf will be in msg_head-msg_tail queue */
- wmsg->next = NULL;
- cpcb->msg_tail->next = wmsg;
- cpcb->msg_tail = wmsg;
- (void) do_writemore (conn);
- NSTCP_LOGINF ("do_write finished....");
- return;
- }
-
- if (conn->state != SPL_NETCONN_NONE)
- {
- /* netconn is connecting, closing or in blocking write */
- NSPOL_LOGINF (TCP_DEBUG,
- "msg->conn->state != SPL_NETCONN_NONE..netconn is connecting, "
- "closing or in blocking write]conn=%p", conn);
- SET_MSG_ERR (m, ERR_INPROGRESS);
- }
- /* this means we should start to process this message */
- else if (tpcb != NULL)
- {
- conn->state = SPL_NETCONN_WRITE;
-
- /* set all the variables used by do_writemore */
- if (0 != cpcb->write_offset)
- {
- NSPOL_LOGERR ("already writing or closing]conn=%p", conn);
- goto err_return;
- }
-
- if (0 == wmsg->len)
- {
- NSPOL_LOGERR ("msg->msg.w.len=0]conn=%p", conn);
- goto err_return;
- }
-
- /* record the msg will be processed */
- cpcb->current_msg = m;
- if (cpcb->msg_head != NULL || cpcb->msg_tail != NULL)
- {
- NSPOL_LOGERR ("error maybe lost mesg]conn=%p", conn);
- }
- cpcb->msg_head = cpcb->msg_tail = wmsg;
- wmsg->next = NULL;
- cpcb->write_offset = 0;
-
- (void) do_writemore (conn);
-
- if ((conn->snd_buf) > TCP_SNDLOWAT)
- {
- if (cpcb->model == SOCKET_STACKX)
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_SENDPLUS, 1);
- }
- NSTCP_LOGINF ("do_write finished %d", conn->snd_buf);
-
- /* for both cases: if do_writemore was called, don't ACK the APIMSG
- since do_writemore ACKs it! */
- return;
- }
- else
- {
- SET_MSG_ERR (m, ERR_CONN);
- }
- }
- else
- {
- SET_MSG_ERR (m, ERR_VAL);
- }
- }
- NSTCP_LOGINF ("do_write finished");
-
-err_return:
- pbuf_free_safe (wmsg->p);
- ASYNC_MSG_FREE (m);
-
- return;
-}
-
-void
-do_getsockname (struct common_pcb *cpcb, msg_getaddrname * amsg)
-{
- spl_netconn_t *conn;
- struct tcp_pcb *tcp;
- struct udp_pcb *udp;
- struct sockaddr_in *paddr = (struct sockaddr_in *) &amsg->sock_addr;
-
- data_com_msg *m = MSG_ENTRY (amsg, data_com_msg, buffer);
-
- if ((NULL == cpcb) || !(conn = cpcb->conn))
- {
- NSTCP_LOGERR ("failed to get sock");
- paddr->sin_family = 0;
- paddr->sin_port = 0;
- paddr->sin_addr.s_addr = 0;
- SET_MSG_ERR (m, ERR_CONN);
- return;
- }
-
- NS_LOG_CTRL (LOG_CTRL_GETSOCKNAME, LOGTCP, "NSTCP", NSLOG_DBG,
- "cpcb=%p,conn=%p,cmd=%u", cpcb, cpcb->conn, amsg->cmd);
-
- paddr->sin_family = AF_INET;
- SET_MSG_ERR (m, ERR_OK);
-
- if (amsg->cmd == 0)
- {
- if (cpcb->type == SPL_NETCONN_TCP)
- {
- tcp = (struct tcp_pcb *) cpcb->conn->private_data;
- /* add judgement:(NETCONN_LISTEN == conn->state) in following if words */
- /* If connect is not done in TCP then the remote address will not be there so need to update proper error code
- if the application call the getpeername in TCP mode */
- if ((SPL_NETCONN_LISTEN == conn->state)
- || (tcp->remote_ip.addr == 0) || (tcp->remote_port == 0))
- {
- paddr->sin_family = 0;
- paddr->sin_port = 0;
- paddr->sin_addr.s_addr = 0;
- SET_MSG_ERR (m, ERR_CONN);
- }
- else
- {
- paddr->sin_port = spl_htons (tcp->remote_port);
- paddr->sin_addr.s_addr = tcp->remote_ip.addr;
- }
- }
- else if (cpcb->type == SPL_NETCONN_UDP)
- {
- udp = (struct udp_pcb *) cpcb->conn->private_data;
- /* If connect is not done in UDP then the remote address will not be there so need to update proper error code
- if the application call the getpeername in UDP mode
- */
- if ((udp->remote_ip.addr == 0) || (udp->remote_port == 0))
- {
- paddr->sin_family = 0;
- paddr->sin_port = 0;
- paddr->sin_addr.s_addr = 0;
- SET_MSG_ERR (m, ERR_CONN);
- }
- else
- {
- paddr->sin_port = spl_htons (udp->remote_port);
- paddr->sin_addr.s_addr = udp->remote_ip.addr;
- }
- }
- }
- else
- {
- if (cpcb->type == SPL_NETCONN_TCP)
- {
- tcp = (struct tcp_pcb *) cpcb->conn->private_data;
- paddr->sin_port = spl_htons (tcp->local_port);
- paddr->sin_addr.s_addr = tcp->local_ip.addr;
- }
- else if (cpcb->type == SPL_NETCONN_UDP)
- {
- udp = (struct udp_pcb *) cpcb->conn->private_data;
- paddr->sin_port = spl_htons (udp->local_port);
- paddr->sin_addr.s_addr = udp->local_ip.addr;
- }
- }
-}
-
-/**
- * Close a TCP pcb contained in a netconn
- * Called from netconn_close
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-void
-do_close (struct common_pcb *cpcb, msg_close * cmsg)
-{
- spl_netconn_t *conn = cpcb->conn;
- data_com_msg *m = MSG_ENTRY (cmsg, data_com_msg, buffer);
-
- NSTCP_LOGDBG ("msg->conn=%p,state=%d", conn, conn->state);
-
- /* @todo: abort running write/connect? */
- if ((conn->state != SPL_NETCONN_NONE)
- && (conn->state != SPL_NETCONN_LISTEN)
- && (conn->state != SPL_NETCONN_CONNECT))
- {
- if (SPL_NETCONN_TCP != cpcb->type)
- {
- NSTCP_LOGERR ("msg->conn=%p,type=%d", conn, cpcb->type);
- return;
- }
- NSTCP_LOGWAR ("msg->conn=%p,state=%d", conn, conn->state);
- SET_MSG_ERR (m, ERR_INPROGRESS);
- }
- else if (cpcb->type == SPL_NETCONN_TCP) //clear codeDEX warning , CID:24336, cpcb can't be null.
- {
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
-
- if (tpcb == NULL)
- {
- NSTCP_LOGERR ("tpcb null msg->conn=%p,type=%d", conn, cpcb->type);
- return;
- }
- if ((cmsg->shut != SPL_NETCONN_SHUT_RDWR)
- && (conn->state == SPL_NETCONN_LISTEN))
- {
- /* LISTEN doesn't support half shutdown */
- NSTCP_LOGERR
- ("LISTEN doesn't support half shutdown!]conn=%p,pcb=%p,state=%d",
- conn, tpcb, conn->state);
- SET_MSG_ERR (m, ERR_CONN);
- }
- else
- {
- if (cmsg->shut & SPL_NETCONN_SHUT_RD)
- {
- /* Drain and delete mboxes */
- (void) netconn_drain (cpcb->type, conn);
- unlink_recv_ring (conn);
- }
-
- if (((NULL != cpcb->current_msg)
- && (conn->state != SPL_NETCONN_CONNECT))
- || (0 != cpcb->write_offset))
- {
- NSTCP_LOGERR
- ("already writing or closing]conn=%p,pcb=%p,offset=%zu,curmsg=%p",
- conn, tpcb, cpcb->write_offset, cpcb->current_msg);
- SET_MSG_ERR (m, ERR_CONN);
- return;
- }
-
- if (conn->state == SPL_NETCONN_CONNECT)
- {
- if (cpcb->current_msg != NULL
- && cpcb->current_msg->param.minor_type ==
- SPL_API_DO_CONNECT)
- {
- SET_MSG_ERR (m, ERR_RST);
- SYNC_MSG_ACK (cpcb->current_msg);
- }
- else
- {
- NSTCP_LOGINF
- ("already in connecting]conn=%p,cpcb=%p,msg=%p", conn,
- cpcb, cpcb->current_msg);
- }
- /* maybe need to clean cpcb->msg_head */
- }
-
- conn->state = SPL_NETCONN_CLOSE;
- cpcb->current_msg = m;
- (void) do_close_internal (cpcb, 1);
-
- if (SPL_NETCONN_SHUT_RD == cmsg->shut
- || SPL_NETCONN_SHUT_RDWR == cmsg->shut)
- {
- SPL_API_EVENT (conn, SPL_NETCONN_EVT_RCVPLUS, 1);
- }
-
- return;
- }
- }
- else
- {
- SET_MSG_ERR (m, ERR_VAL);
- }
-}
-
-/*trans kerner option to stackx option*/
-int
-ks_to_stk_opt (int opt)
-{
- int stack_opt = opt;
- switch (opt)
- {
- case SO_DEBUG:
- stack_opt = SOF_DEBUG;
- break;
- case SO_ACCEPTCONN:
- stack_opt = SOF_ACCEPTCONN;
- break;
- case SO_BROADCAST:
- stack_opt = SOF_BROADCAST;
- break;
- case SO_KEEPALIVE:
- stack_opt = SOF_KEEPALIVE;
- break;
- case SO_REUSEADDR:
- stack_opt = SOF_REUSEADDR;
- break;
- case SO_DONTROUTE:
- stack_opt = SOF_DONTROUTE;
- break;
- case SO_USELOOPBACK:
- stack_opt = SOF_USELOOPBACK;
- break;
- case SO_OOBINLINE:
- stack_opt = SOF_OOBINLINE;
- break;
- default:
- stack_opt = opt;
- break;
- }
- return stack_opt;
-}
-
-void
-do_get_tcpproto_getsockopt_internal (struct common_pcb *cpcb,
- msg_setgetsockopt * smsg)
-{
- int optname;
- void *optval;
- struct tcp_pcb *tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
-
- optname = smsg->optname;
- optval = &smsg->optval;
-
- switch (optname)
- {
- case SPL_TCP_NODELAY:
- *(int *) optval = tcp_nagle_disabled (tpcb);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,TCP_NODELAY=%s",
- cpcb->socket, (*(int *) optval) ? "on" : "off");
- break;
-
- case SPL_TCP_KEEPIDLE:
- *(int *) optval = (int) (tpcb->keep_idle / 1000);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,SPL_TCP_KEEPIDLE=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SPL_TCP_KEEPINTVL:
- *(int *) optval = (int) (tpcb->keep_intvl / 1000);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,SPL_TCP_KEEPINTVL=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SPL_TCP_KEEPCNT:
- *(int *) optval = (int) tpcb->keep_cnt;
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,SPL_TCP_KEEPCNT=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SPL_TCP_INFO:
- ((struct tcp_info *) optval)->tcpi_total_retrans = (int) tpcb->nrtx;
- ((struct tcp_info *) optval)->tcpi_snd_mss = (int) tpcb->mss;
- ((struct tcp_info *) optval)->tcpi_rtt = (int) tpcb->sa;
- ((struct tcp_info *) optval)->tcpi_snd_cwnd = (int) tpcb->cwnd;
- break;
- default:
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]optname=%d", optname);
- SET_MSG_ERR (m, EOPNOTSUPP);
- break;
- }
-}
-
-void
-do_get_ipproto_getsockopt_internal (struct common_pcb *cpcb,
- msg_setgetsockopt * smsg)
-{
- int optname;
- u32_t optlen;
- void *optval;
-
- struct ip_pcb *ipcb = (struct ip_pcb *) (cpcb);
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
-
- optname = smsg->optname;
- optval = &smsg->optval;
- optlen = smsg->optlen;
-
- switch (optname)
- {
- case IP_TTL:
- *(int *) optval = ipcb->ttl;
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,IP_TTL=%d",
- cpcb->socket, *(int *) optval);
- break;
- case IP_TOS:
- smsg->optlen =
- (optlen < sizeof (u32_t)) ? sizeof (u8_t) : sizeof (u32_t);
- if (smsg->optlen == sizeof (u8_t))
- {
- *(u8_t *) optval = ipcb->tos;
- }
- else
- {
- *(u32_t *) optval = (u32_t) ipcb->tos;
- }
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,IP_TOS=%d",
- cpcb->socket, *(int *) optval);
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]optname=%d", optname);
- break;
- }
-}
-
-void
-do_get_solsocket_getsockopt_internal (struct common_pcb *cpcb,
- msg_setgetsockopt * smsg)
-{
- int optname;
- void *optval;
- struct tcp_pcb *tpcb = NULL;
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
- struct tcp_pcb *pcb = (struct tcp_pcb *) cpcb->conn->private_data;
-
- optname = smsg->optname;
- optval = &smsg->optval;
-
- switch (optname)
- {
- /* The option flags */
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_REUSEADDR:
- *(int *) optval =
- (ip_get_option ((struct ip_pcb *) cpcb, ks_to_stk_opt (optname))) ? 1
- : 0;
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]fd=%d,optname=%d,optval=%s",
- cpcb->socket, optname, (*(int *) optval ? "on" : "off"));
- break;
- case SO_ACCEPTCONN:
- tpcb = (struct tcp_pcb *) cpcb->conn->private_data;
- if ((smsg->optlen < sizeof (int)) || (NULL == tpcb))
- {
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "(SOL_SOCKET, SO_ACCEPTCONN) failed]fd=%d,tcp=%p,optlen=%u",
- cpcb->socket, cpcb, smsg->optlen);
- break;
- }
- if (tpcb->state == LISTEN)
- {
- *(int *) optval = 1;
- }
- else
- {
- *(int *) optval = 0;
- }
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "(SOL_SOCKET, SO_ACCEPTCONN)]fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SO_TYPE:
- switch (cpcb->type)
- {
- case SPL_NETCONN_RAW:
- *(int *) optval = SOCK_RAW;
- break;
- case SPL_NETCONN_TCP:
- *(int *) optval = SOCK_STREAM;
- break;
- case SPL_NETCONN_UDP:
- *(int *) optval = SOCK_DGRAM;
- break;
- default: /* unrecognized socket type */
- *(int *) optval = cpcb->type;
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "(SOL_SOCKET, SO_TYPE): unrecognized socket type]fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- } /* switch (sock->conn->type) */
- NSPOL_LOGDBG (SOCKETS_DEBUG, "(SOL_SOCKET, SO_TYPE)]fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SO_RCVTIMEO:
- (*(struct timeval *) optval).tv_sec =
- spl_netconn_get_recvtimeout (cpcb) / 1000;
- (*(struct timeval *) optval).tv_usec =
- (spl_netconn_get_recvtimeout (cpcb) % 1000) * 1000;
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "stackx_getsockopt(SOL_SOCKET, SO_RCVTIMEO)]fd=%d,sec=%ld,usec=%ld",
- cpcb->socket, (*(struct timeval *) optval).tv_sec,
- (*(struct timeval *) optval).tv_usec);
- break;
- case SO_SNDTIMEO:
- (*(struct timeval *) optval).tv_sec =
- spl_netconn_get_sendtimeout (cpcb) / 1000;
- (*(struct timeval *) optval).tv_usec =
- (spl_netconn_get_sendtimeout (cpcb) % 1000) * 1000;
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "(SOL_SOCKET, SO_SNDTIMEO)]fd=%dsec=%ld,usec=%ld",
- cpcb->socket, (*(struct timeval *) optval).tv_sec,
- (*(struct timeval *) optval).tv_usec);
- break;
- case SO_SNDBUF:
- {
- u16_t mss = (pcb->mss > TCP_MSS
- || pcb->mss == 0) ? TCP_MSS : pcb->mss;
- *(int *) optval = spl_netconn_get_sendbufsize (cpcb->conn) * mss;
- /*If user has not configured any sendbuffer value then we should return minimum
- promissed for the connection based on the flow control. */
- if (*(int *) optval == 0)
- {
- *(int *) optval = CONN_TCP_MEM_MIN_LINE * mss;
- }
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "(SOL_SOCKET, SO_SNDBUF)]fd=%d,optval=%d", cpcb->socket,
- *(int *) optval);
- break;
- }
- case SO_NO_CHECK:
- *(int *) optval =
- (udp_flags ((struct udp_pcb *) cpcb->conn->private_data) &
- UDP_FLAGS_NOCHKSUM) ? 1 : 0;
- NSPOL_LOGDBG (SOCKETS_DEBUG, "(SOL_SOCKET, SO_NO_CHECK)fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SO_SNDLOWAT:
- *(int *) optval = 1;
- NSPOL_LOGDBG (SOCKETS_DEBUG, "(SOL_SOCKET, SO_SNDLOWAT)fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- break;
-
- case SO_RCVLOWAT:
- *(int *) optval = spl_netconn_get_reclowbufsize (cpcb);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "(SOL_SOCKET, SO_RCVLOWAT)fd=%d,optval=%d",
- cpcb->socket, *(int *) optval);
- break;
- case SO_ERROR:
- *(int *) optval = GET_MSG_ERR (m);
- SET_MSG_ERR (m, 0);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "SOL_SOCKET]fd=%d,optval=%d", cpcb->socket,
- *(int *) optval);
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported opt]optname=%d", optname);
- break;
- }
-}
-
-void
-do_getsockopt_internal (struct common_pcb *cpcb, msg_setgetsockopt * smsg)
-{
- int level;
-
- if (NULL == smsg)
- {
- NSTCP_LOGERR ("arg NULL");
- return;
- }
-
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
-
- level = smsg->level;
- switch (level)
- {
- /* Level: SOL_SOCKET */
- case SOL_SOCKET:
- do_get_solsocket_getsockopt_internal (cpcb, smsg);
-
- break;
-
- /* Level: IPPROTO_IP */
- case IPPROTO_IP:
- do_get_ipproto_getsockopt_internal (cpcb, smsg);
-
- break;
- /* Level: IPPROTO_TCP */
- case IPPROTO_TCP:
- do_get_tcpproto_getsockopt_internal (cpcb, smsg);
-
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported level]level=%d", level);
- break;
- } /* switch (level) */
-}
-
-void
-do_tcpsock_setsockopt (spl_netconn_t * conn, msg_setgetsockopt * smsg)
-{
- const void *optval;
- int optname;
- struct common_pcb *cpcb = (struct common_pcb *) conn->comm_pcb_data;
- struct tcp_pcb *tpcb = (struct tcp_pcb *) conn->private_data;
-
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
-
- optname = smsg->optname;
- optval = &smsg->optval;
-
- switch (optname)
- {
- case SPL_TCP_NODELAY:
- if (*(int *) optval)
- {
- tcp_nagle_disable (tpcb);
- }
- else
- {
- tcp_nagle_enable (tpcb);
- }
-
- NSTCP_LOGDBG ("IPPROTO_TCP, TCP_NODELAY]fd=%d,optval=%s",
- cpcb->socket, (*(int *) optval) ? "on" : "off");
- break;
-
- case SPL_TCP_KEEPIDLE:
- /* CID 52121 (#2 of 3): Other violation (HW_VPP_C_FIND_OPERATORS_2_1_1_3) */
- if ((u32_t) (*(int *) optval) >= INT_MAX / 1000)
- {
- NSTCP_LOGWAR ("optval too big]optval=%u",
- (u32_t) (*(int *) optval));
- *(int *) optval = INT_MAX / 1000;
- }
-
- tpcb->keep_idle = 1000 * (u32_t) (*(int *) optval);
-
- if (tpcb->keep_idle > TCP_KEEPIDLE_DEFAULT)
- {
- NSTCP_LOGWAR
- ("(%d, IPPROTO_TCP, SPL_TCP_KEEPIDLE. value bigger than 7200000UL so setting to default 7200000UL) requested is -> %"
- U32_F " ", cpcb->socket, tpcb->keep_idle);
- tpcb->keep_idle = TCP_KEEPIDLE_DEFAULT;
- }
-
- NSTCP_LOGDBG ("IPPROTO_TCP, SPL_TCP_KEEPIDLE](fd=%d,keep_idle=%" U32_F
- " ", cpcb->socket, tpcb->keep_idle);
-
- /* Not required lwip_slowtmr will take care about timer. */
- break;
- case SPL_TCP_KEEPINTVL:
- /* CID 52121 (#1 of 3): Other violation (HW_VPP_C_FIND_OPERATORS_2_1_1_3) */
- if ((u32_t) (*(int *) optval) >= INT_MAX / 1000)
- {
- NSTCP_LOGWAR ("optval too big]optval=%u",
- (u32_t) (*(int *) optval));
- *(int *) optval = INT_MAX / 1000;
- }
-
- tpcb->keep_intvl = 1000 * (u32_t) (*(int *) optval);
-
- if (tpcb->keep_intvl > TCP_KEEPIDLE_DEFAULT) /*max timer value supported */
- {
- NSTCP_LOGWAR
- ("(%d, IPPROTO_TCP, SPL_TCP_KEEPINTVL. value bigger than 7200000UL so setting to default 7200000UL) requested is -> %"
- U32_F " ", cpcb->socket, tpcb->keep_intvl);
- tpcb->keep_intvl = TCP_KEEPIDLE_DEFAULT;
- }
- NSTCP_LOGDBG ("IPPROTO_TCP, SPL_TCP_KEEPINTVL]fd=%d,keep_intvl=%" U32_F
- " ", cpcb->socket, tpcb->keep_intvl);
- break;
- case SPL_TCP_KEEPCNT:
- tpcb->keep_cnt = (u32_t) (*(int *) optval);
- NSTCP_LOGDBG ("IPPROTO_TCP, SPL_TCP_KEEPCNT]fd=%d,keep_cnt=%" U32_F " ",
- cpcb->socket, tpcb->keep_cnt);
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]optname=%d", optname);
- break;
- }
-}
-
-void
-do_ipsock_setsockopt (struct common_pcb *cpcb, msg_setgetsockopt * smsg)
-{
- const void *optval;
- u32_t optlen;
- int optname;
-
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
-
- struct udp_pcb *upcb = (struct udp_pcb *) cpcb->conn->private_data;
- struct ip_pcb *ipcb = (struct ip_pcb *) upcb;
-
- optname = smsg->optname;
- optval = &smsg->optval;
- optlen = smsg->optlen;
-
- int val = 0;
- int bNotAllowSet = 0;
- switch (optname)
- {
- case IP_TTL:
- ipcb->ttl = (u8_t) (*(int *) optval);
- NSIP_LOGDBG ("IPPROTO_IP,IP_TTL]fd=%d,ttl=%u", cpcb->socket, ipcb->ttl);
- break;
- case IP_TOS:
- bNotAllowSet = (cpcb->dataSentFlag != 0)
- && ((SPL_NETCONN_TCP == cpcb->type)
- || (SPL_NETCONN_UDP == cpcb->type)
- || (SPL_NETCONN_RAW == cpcb->type));
- /*not allow set tos value when sending data */
- if (bNotAllowSet)
- {
- SET_MSG_ERR (m, ERR_VAL);
- break;
- }
-
- if (optlen >= sizeof (u32_t))
- {
- val = (int) (*(const int *) optval);
- }
- else if (optlen >= sizeof (u8_t))
- {
- val = (int) (*(const u8_t *) optval);
- }
-
- if (SPL_NETCONN_TCP == cpcb->type)
- {
- val &= ~INET_ECN_MASK;
- val |= ipcb->tos & INET_ECN_MASK;
- }
- ipcb->tos = (u8_t) (val);
-
- smsg->msg_box = (get_msgbox ((u8_t) val))->llring;
-
- NSIP_LOGDBG ("IPPROTO_IP,IP_TOS]]fd=%d,tos=%u", cpcb->socket,
- ipcb->tos);
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]optname=%d", optname);
- break;
- }
-}
-
- /*Made seperate functions to reduce code complexity */
-void
-do_setsockopt_recvtimeout_internal (const void *optval,
- struct common_pcb *cpcb)
-{
- if ((*(struct timeval *) optval).tv_sec < 0)
- {
- spl_netconn_set_recvtimeout (cpcb, 0);
- }
- else
- {
- spl_netconn_set_recvtimeout (cpcb, MAX_WAIT_TIMEOUT);
- if ((*(struct timeval *) optval).tv_sec != 0
- || (*(struct timeval *) optval).tv_usec != 0)
- {
- if ((*(struct timeval *) optval).tv_sec <
- ((MAX_WAIT_TIMEOUT / 1000) - 1))
- {
- spl_netconn_set_recvtimeout (cpcb,
- (*(struct timeval *) optval).tv_sec
- * 1000 +
- (*(struct timeval *)
- optval).tv_usec / 1000);
- }
- }
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "SOL_SOCKET, SO_RCVTIMEO]conn=%p,fd=%d,optval=%d", cpcb,
- cpcb->socket, cpcb->recv_timeout);
-}
-
-void
-do_setsockopt_sndtimeout_internal (const void *optval,
- struct common_pcb *cpcb)
-{
- if ((*(struct timeval *) optval).tv_sec < 0)
- {
- spl_netconn_set_sendtimeout (cpcb, 0);
- }
- else
- {
- spl_netconn_set_sendtimeout (cpcb, MAX_WAIT_TIMEOUT);
- if ((*(struct timeval *) optval).tv_sec != 0
- || (*(struct timeval *) optval).tv_usec != 0)
- {
- if ((*(struct timeval *) optval).tv_sec <
- ((MAX_WAIT_TIMEOUT / 1000) - 1))
- {
- spl_netconn_set_sendtimeout (cpcb,
- (*(struct timeval *) optval).tv_sec
- * 1000 +
- (*(struct timeval *)
- optval).tv_usec / 1000);
- }
- }
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "SOL_SOCKET, SO_SNDTIMEO]conn=%p,fd=%d,optval=%d", cpcb,
- cpcb->socket, cpcb->send_timeout);
-}
-
-#define IS_TCP_PCB(cpcb) (cpcb && (cpcb->conn) && (SPL_NETCONN_TCP == cpcb->conn->type))
-NSTACK_STATIC inline void
-set_opt_sol_socket (struct common_pcb *cpcb, struct tcp_pcb *pcb,
- data_com_msg * m, int level, int optname,
- const void *optval)
-{
- switch (optname)
- {
- /* The option flags */
- case SO_BROADCAST:
-
- /* UNIMPL case SO_DEBUG: */
- /* UNIMPL case SO_DONTROUTE: */
- case SO_KEEPALIVE:
- case SO_REUSEADDR:
-
- if (NULL == pcb)
- {
- NSPOL_LOGERR ("conn->pcb.ip is null");
- break;
- }
-
- if (*(const int *) optval)
- {
- ip_set_option ((struct ip_pcb *) pcb, ks_to_stk_opt (optname));
- }
- else
- {
- ip_reset_option ((struct ip_pcb *) pcb, ks_to_stk_opt (optname));
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG, "]conn=%p,fd=%d,optname=0x%x,optval=%s",
- cpcb, cpcb->socket, optname,
- (*(const int *) optval ? "on" : "off"));
-
- /* No use now, since tcp_slowtmr will take care about not sending/sending of keepalive */
- break;
-
- case SO_RCVLOWAT:
- spl_netconn_set_reclowbufsize (cpcb, *(int *) optval);
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "SOL_SOCKET, SO_RCVLOWAT]conn=%p,fd=%d,optval=%d", cpcb,
- cpcb->socket, cpcb->sk_rcvlowat);
- break;
-
- case SO_RCVTIMEO:
- /*to reduce code complexity */
- do_setsockopt_recvtimeout_internal (optval, cpcb);
- break;
-
- case SO_SNDTIMEO:
- /*to reduce code complexity */
- do_setsockopt_sndtimeout_internal (optval, cpcb);
- break;
-
- case SO_SNDBUF:
- {
- /* udp pcb invalid access will cause coredump */
- if (!IS_TCP_PCB (cpcb))
- {
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "not support for non tcp socket]optname=%d, level=%d",
- optname, level);
- return;
- }
-
- u16_t mss = (pcb->mss > TCP_MSS
- || pcb->mss == 0) ? TCP_MSS : pcb->mss;
-
- if (*(int *) optval < (int) mss)
- {
- /*set value of one TCP_MSS */
- spl_netconn_set_sendbufsize (cpcb->conn, 1);
- }
- else
- {
- spl_netconn_set_sendbufsize (cpcb->conn,
- (*(int *) optval) / (int) mss);
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "SOL_SOCKET, SO_SNDBUF]conn=%p,fd=%d,optval=%d", cpcb,
- cpcb->socket, cpcb->conn->send_bufsize * mss);
- break;
- }
-
- case SO_NO_CHECK:
- /* How udp is coming here.. ?? @TODO: May be move to someother function.? */
- /* solve segment issue when the PCB is not exist */
- if (NULL == cpcb)
- {
- NSPOL_LOGERR ("conn->pcb.udp is null");
- break;
- }
-
- struct udp_pcb *upcb = (struct udp_pcb *) pcb;
-
- if (*(int *) optval)
- {
- udp_setflags (upcb, udp_flags (upcb) | UDP_FLAGS_NOCHKSUM);
- }
- else
- {
- udp_setflags (upcb, udp_flags (upcb) & ~UDP_FLAGS_NOCHKSUM);
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "SOL_SOCKET, SO_NO_CHECK]conn=%p,fd=%d,optval=0x%x", cpcb,
- cpcb->socket, upcb->flags);
- break;
-
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]optname=%d", optname);
- break;
- } /* switch (optname) */
-
-}
-
-void
-do_setsockopt_internal (struct common_pcb *cpcb, msg_setgetsockopt * smsg)
-{
- int level, optname;
- const void *optval;
-
- data_com_msg *m = MSG_ENTRY (smsg, data_com_msg, buffer);
- struct tcp_pcb *pcb = (struct tcp_pcb *) cpcb->conn->private_data;
-
- if (NULL == smsg)
- {
- NSTCP_LOGERR ("arg null!");
- return;
- }
-
- level = smsg->level;
- optname = smsg->optname;
- optval = &smsg->optval;
-
- switch (level)
- {
- /* Level: SOL_SOCKET */
- case SOL_SOCKET:
- set_opt_sol_socket (cpcb, pcb, m, SOL_SOCKET, optname, optval);
- break;
-
- /* Level: IPPROTO_IP */
- case IPPROTO_IP:
-
- if (NULL == cpcb)
- {
- NSPOL_LOGERR ("conn->pcb.ip is null");
- break;
- }
-
- do_ipsock_setsockopt (cpcb, smsg);
-
- break;
- /* Level: IPPROTO_TCP */
- case IPPROTO_TCP:
- /* udp pcb invalid access will cause coredump */
- if (!IS_TCP_PCB (cpcb))
- {
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG,
- "not support for non tcp socket]optname=%d,level=%d",
- optname, level);
- return;
- }
-
- if (NULL == cpcb)
- {
- NSPOL_LOGERR ("conn->pcb.tcp is null");
- break;
- }
-
- do_tcpsock_setsockopt (cpcb->conn, smsg);
-
- break;
- default:
- SET_MSG_ERR (m, ERR_VAL);
- NSPOL_LOGDBG (SOCKETS_DEBUG, "unsupported]level=%d", level);
- break;
- } /* switch (level) */
-}
-
-/*app send its version info to nStackMain */
-void
-do_app_touch (msg_app_touch * smsg)
-{
- //write app version info to running.log
- NSPOL_LOGINF (SOCKETS_DEBUG, "hostpid=%u,app_version=%s", smsg->hostpid,
- smsg->app_version);
-}
-
-void
-tcp_free_accept_ring (spl_netconn_t * conn)
-{
- err_t de_err = ERR_OK;
- spl_netconn_t *newconn;
- while (1)
- {
- newconn = NULL;
- /* -1 means nonblocking */
- de_err = accept_dequeue (conn, (void **) &newconn, (u32_t) - 1);
- if (de_err == ERR_WOULDBLOCK || newconn == NULL)
- return;
-
- tcp_drop_conn (newconn);
- }
-}
-
-void
-tcp_drop_conn (spl_netconn_t * conn)
-{
- /* usually we should not access pcb by recv_obj, but no choice */
- struct tcp_pcb *pcb = (struct tcp_pcb *) conn->private_data;
-
- /* free conn first, even pcb is NULL */
- free_conn_by_spl (conn);
-
- if (pcb == NULL)
- {
- NSTCP_LOGWAR
- ("a tcp connection in accept queue without pcb!]newconn=%p", conn);
- return;
- }
-
- /* tell peer conneciton is reset */
- NSTCP_LOGWAR ("sending RST in accept waiting queue!]pcb=%p", pcb);
-
- tcp_rst (pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,
- pcb->local_port, pcb->remote_port);
-
- tcp_pcb_remove (&tcp_active_pcbs, pcb);
- memp_free (MEMP_TCP_PCB, pcb);
-}
-
-void
-update_tcp_state (spl_netconn_t * conn, enum tcp_state state)
-{
- spl_tcp_state_t spl_state;
-
- if (conn != NULL)
- {
- switch (state)
- {
- case CLOSED:
- spl_state = SPL_CLOSED;
- break;
- case LISTEN:
- spl_state = SPL_LISTEN;
- break;
- case SYN_SENT:
- spl_state = SPL_SYN_SENT;
- break;
- case SYN_RCVD:
- spl_state = SPL_SYN_RCVD;
- break;
- case ESTABLISHED:
- spl_state = SPL_ESTABLISHED;
- break;
- case FIN_WAIT_1:
- spl_state = SPL_FIN_WAIT_1;
- break;
- case FIN_WAIT_2:
- spl_state = SPL_FIN_WAIT_2;
- break;
- case CLOSE_WAIT:
- spl_state = SPL_CLOSE_WAIT;
- break;
- case CLOSING:
- spl_state = SPL_CLOSING;
- break;
- case LAST_ACK:
- spl_state = SPL_LAST_ACK;
- break;
- case TIME_WAIT:
- spl_state = SPL_TIME_WAIT;
- break;
- default:
- spl_state = SPL_CLOSED;
- break;
- }
- if (conn->tcp_state != spl_state)
- {
- conn->tcp_state = spl_state;
- NSTCP_LOGINF ("conn=%p,private_data=%p,state=%d", conn,
- conn->private_data, spl_state);
- }
- }
-}
-
-void
-do_update_pcbstate ()
-{
- struct tcp_pcb *tpcb;
- int i;
- for (i = 0; i < NUM_TCP_PCB_LISTS; i++)
- {
- for (tpcb = *tcp_pcb_lists[i]; tpcb != NULL; tpcb = tpcb->next)
- {
- if (tpcb->callback_arg)
- {
- update_tcp_state ((spl_netconn_t *) tpcb->callback_arg,
- tpcb->state);
- }
- }
- }
-
- return;
-}
-
-void
-init_stackx_lwip ()
-{
- lwip_init ();
- sys_timeouts_init ();
- return;
-}
-
-void
-free_common_pcb (struct common_pcb *cpcb)
-{
- if (res_free (&cpcb->res_chk))
- {
- NSFW_LOGERR ("conn refree!]conn=%p", cpcb->conn);
- return;
- }
-
- common_pcb_reset (cpcb);
-
- mring_handle pool = p_def_stack_instance->cpcb_seg;
- if (nsfw_mem_ring_enqueue (pool, (void *) cpcb) != 1)
- {
- NSSBR_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- }
- return;
-}
-
-struct common_pcb *
-alloc_common_pcb (enum spl_netconn_type type)
-{
- struct common_pcb *cpcb = NULL;
-
- if (nsfw_mem_ring_dequeue (p_def_stack_instance->cpcb_seg, (void **) &cpcb)
- != 1)
- {
- NSSBR_LOGERR ("malloc conn failed");
- return NULL;
- }
-
- NSFW_LOGINF ("alloc_common_pcb]cpcb=%p", cpcb);
-
- common_pcb_init (cpcb);
- cpcb->type = type;
-
- res_alloc (&cpcb->res_chk);
- return cpcb;
-}
diff --git a/stacks/lwip_stack/lwip_src/api/spl_netbuf.c b/stacks/lwip_stack/lwip_src/api/spl_netbuf.c
deleted file mode 100644
index 9c682fc..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_netbuf.c
+++ /dev/null
@@ -1,58 +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.
-*/
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-//#include "sc_dpdk.h"
-#include "spl_netbuf.h"
-
-void
-spl_netbuf_delete (struct spl_netbuf *buf)
-{
- if (likely (buf != NULL))
- {
- spl_pbuf_free (PTR_SHTOL (struct spl_pbuf *, buf->p));
- }
-}
diff --git a/stacks/lwip_stack/lwip_src/api/spl_netifapi.c b/stacks/lwip_stack/lwip_src/api/spl_netifapi.c
deleted file mode 100644
index ab1446a..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_netifapi.c
+++ /dev/null
@@ -1,288 +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 "spl_opt.h"
-
-#if STACKX_NETIF_API
-
-#include "nsfw_msg_api.h"
-#include "netifapi.h"
-#include <sys/socket.h>
-//#include <netinet/in.h>
-
-#include "stackx_spl_share.h"
-#include "spl_sbr.h"
-#include "stackx/spl_api.h"
-#include "tcpip.h"
-#include "sc_dpdk.h"
-#include "spl_instance.h"
-#include "spl_hal.h"
-#include "spl_def.h"
-#include <inet.h>
-
-struct netifExt *gNetifExt = NULL;
-
-/**
- * common operation for sbr message.
- *
- * @param msg the api_msg_msg describing the connection type
- */
-int
-do_halmsg (data_com_msg * m)
-{
- NSPOL_LOGDBG (TESTSOCKET_DEBUG | STACKX_DBG_TRACE,
- "the msg is from HAL module, minor(%u)", m->param.minor_type);
- return 0;
-}
-
-static int
-_do_add_netif (data_com_msg * m)
-{
- NSPOL_LOGINF (NETIF_DEBUG, "_do_add_netif\n");
-
- m->param.err = ERR_OK;
- msg_add_netif *_m = (msg_add_netif *) m->buffer;
- _m->function (_m);
- SYNC_MSG_ACK (m);
- return 0;
-}
-
-struct netif *
-find_netif_by_if_name (char *if_name)
-{
-
- struct netifExt *netifEx = gNetifExt;
- struct netif *netif = NULL;
-
- while (netifEx != NULL)
- {
- if (!(strcmp (netifEx->if_name, if_name)))
- {
- for (netif = netif_list; netif != NULL; netif = netif->next)
- {
- if (netifEx->id == netif->num)
- return netif;
- }
-
- }
- netifEx = netifEx->next;
- }
-
- return NULL;
-}
-
-/*@TODO: May be moved to some other file ? Like HAL*/
-struct netif *
-get_netif_by_ip (unsigned int ip)
-{
- struct netif *netif;
-
- if (ip == 0)
- {
- return NULL;
- }
-
- for (netif = netif_list; netif != NULL; netif = netif->next)
- {
- if (ip == netif->ip_addr.addr)
- {
- NSPOL_LOGINF (NETIF_DEBUG, "netif_find: found %x %c %c", ip,
- netif->name[0], netif->name[1]);
- return netif;
- }
- }
- NSPOL_LOGINF (NETIF_DEBUG, "netif_find: Not found %x", ip);
- return NULL;
-}
-
-/*
-@TODO:
-*/
-struct netif *
-netif_check_broadcast_addr (spl_ip_addr_t * addr)
-{
- return NULL;
-}
-
-struct netifExt *
-getNetifExt (u16_t id)
-{
-
- struct netifExt *netifEx;
- netifEx = gNetifExt;
-
- while (netifEx != NULL)
- {
- if (netifEx->id == id)
- {
- return netifEx;
- }
- netifEx = netifEx->next;
- }
-
- return NULL;
-}
-
-int
-netifExt_add (struct netif *netif)
-{
-
- /* If Netif Ext already created for it then just return sucess */
- if (getNetifExt (netif->num))
- return 0;
-
- struct netifExt *netifEx = malloc (sizeof (struct netifExt));
- if (!netifEx)
- {
- return -1;
- }
-
- if (memset (netifEx, 0, sizeof (struct netifExt)) < 0)
- {
- return -1;
- }
-
- NSPOL_LOGINF (NETIF_DEBUG, "netifExt_added \n");
-
- netifEx->id = netif->num;
-
- /* add this netif to the list */
- netifEx->next = gNetifExt;
- gNetifExt = netifEx;
- return 0;
-}
-
-void
-do_netifapi_netif_add (msg_add_netif * pmsg)
-{
- struct netif *netif = NULL;
- ip_addr_t ipaddr;
- ip_addr_t netmask;
- ip_addr_t gw;
-
- data_com_msg *m = MSG_ENTRY (pmsg, data_com_msg, buffer);
- ipaddr.addr = pmsg->ipaddr->addr;
- netmask.addr = pmsg->netmask->addr;
- gw.addr = pmsg->gw->addr;
-
- NSPOL_LOGINF (NETIF_DEBUG, "do_netifapi_netif_add \n");
- netif = netif_add (pmsg->netif,
- &ipaddr,
- &netmask, &gw, pmsg->state, pmsg->init, pmsg->input);
-
- if (NULL == netif)
- {
- SET_MSG_ERR (m, ERR_IF);
- }
- else
- {
-
- SET_MSG_ERR (m, ERR_OK);
- NSPOL_LOGINF (NETIF_DEBUG, "netif created name %c%c%d\n",
- netif->name[0], netif->name[1], netif->num);
- pmsg->voidfunc (pmsg->netif);
- add_disp_netif (pmsg->netif);
- }
-
-}
-
-err_t
-spl_netifapi_netif_add (struct netif *pnetif,
- spl_ip_addr_t * ipaddr,
- spl_ip_addr_t * netmask,
- spl_ip_addr_t * gw,
- void *state,
- netif_init_fn init,
- netif_input_fn input, netifapi_void_fn voidfunc)
-{
- msg_add_netif stmsg;
-
- stmsg.function = do_netifapi_netif_add;
- stmsg.netif = pnetif;
- stmsg.ipaddr = ipaddr;
- stmsg.netmask = netmask;
- stmsg.gw = gw;
- stmsg.state = state;
- stmsg.init = init;
- stmsg.input = input;
- stmsg.voidfunc = voidfunc;
- return tcpip_netif_add (&stmsg);
-}
-
-int
-add_netif_ip (char *netif_name, unsigned int ip, unsigned int mask)
-{
- struct netif *pnetif;
- int retval;
-
- if (get_netif_by_ip (ip))
- {
- NSPOL_LOGERR ("ip is exist]IP=%s", inet_ntoa (ip));
- return -1;
- }
- NSPOL_LOGINF (NETIF_DEBUG, "add_netif_ip] IP=%s", inet_ntoa (ip));
-
- pnetif = find_netif_by_if_name (netif_name);
- if (pnetif == NULL)
- {
- return -1;
- }
-
- pnetif->ip_addr.addr = ip;
- pnetif->netmask.addr = mask;
-
- if (ip)
- {
- retval = etharp_request (pnetif, &pnetif->ip_addr);
-
- if (ERR_OK != retval)
- {
- NSPOL_LOGERR ("etharp_request failed]retval=%d,netif=%p,ip=%u", retval, pnetif, pnetif->ip_addr.addr); //inet_ntoa is not thread-safe, print u32 instead.
- }
- }
-
- NSPOL_LOGINF (NETIF_DEBUG, "add_netif_ip]netif_name=%s,IP=%s,mask=0x%08x",
- netif_name, inet_ntoa (ip), spl_htonl (mask));
- return 0;
-}
-
-/*lint -e438*/
-int
-del_netif_ip (char *netif_name, unsigned int ip)
-{
- struct netif *pnetif;
- //struct netif* vnetif = NULL;
- //struct netif** ref;
-
- pnetif = find_netif_by_if_name (netif_name);
- if (NULL == pnetif)
- {
- return -1;
- }
-
- NSPOL_LOGINF (NETIF_DEBUG, "del_netif_ip] IP=%s", inet_ntoa (ip));
-
- pnetif->ip_addr.addr = 0;
- pnetif->netmask.addr = 0;
- return 0;
-}
-
-REGIST_MSG_MODULE_MAJOR_FUN (MSG_MODULE_HAL, SPL_TCPIP_MSG_NETIFAPI,
- do_halmsg);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_HAL, SPL_TCPIP_MSG_NETIFAPI,
- NETIF_DO_ADD, _do_add_netif);
-
-#endif /* STACKX_NETIF_API */
diff --git a/stacks/lwip_stack/lwip_src/api/spl_sbr.c b/stacks/lwip_stack/lwip_src/api/spl_sbr.c
deleted file mode 100644
index 4c1be2f..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_sbr.c
+++ /dev/null
@@ -1,495 +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_spl_share.h"
-#include "spl_api.h"
-#include "ip.h"
-#include "spl_api_msg.h"
-#include "stackx_spl_msg.h"
-#include "internal_msg.h"
-#include "spl_sbr.h"
-#include "spl_pbuf.h"
-
-/**
- * common operation for sbr message.
- *
- * @param msg the api_msg_msg describing the connection type
- */
-int
-do_sbrmsg (data_com_msg * m)
-{
- return 0;
-}
-
-/**
- * Create a new pcb of a specific type inside a netconn.
- * Called from netconn_new_with_proto_and_callback.
- *
- * @param msg the api_msg_msg describing the connection type
- */
-static int
-_do_newconn (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- msg_new_netconn *_m = (msg_new_netconn *) m->buffer;
- m->param.err = spl_pcb_new (_m);
-
- if (ERR_OK != m->param.err)
- {
- NSPOL_LOGERR ("pcb_new err]conn=%p,pid=%u,err=%d", _m->conn,
- m->param.recycle_pid, m->param.err);
- goto ERROR;
- }
-
- NSFW_LOGINF ("alloc pcb]conn=%p,pcb=%p,pid=%u", _m->conn,
- _m->conn->private_data, m->param.recycle_pid);
-
- /* sbr use it to set receiver after new connction */
- m->param.receiver = (i64) & _m->conn->private_data;
- m->param.comm_receiver = (i64) & _m->conn->comm_pcb_data;
- _m->conn->recv_obj = m->param.receiver;
-
- SYNC_MSG_ACK (m);
- return 0;
-
-ERROR:
- SYNC_MSG_ACK (m);
- return 0;
-}
-
-int
-_do_connect (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
- m->param.err = ERR_CLSD;
- SYNC_MSG_ACK (m);
- return 0;
- }
-
- msg_connect *_m = (msg_connect *) m->buffer;
- do_connect (cpcb, _m);
-
- /**
- * err == ERR_OK only applies for blocking connction, so others mean
- * in progress for nonblocking connection or failed to connect
- * cpcb may be NULL, so don't change the order of the 2 ifs.
- */
- if (m->param.err != ERR_OK || cpcb->type != SPL_NETCONN_TCP)
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/**
- * Close a TCP pcb contained in a netconn
- * Called from netconn_close
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-int
-_do_close (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb != NULL)
- {
- msg_close *_m = (msg_close *) m->buffer;
- do_close (cpcb, _m);
- }
-
- /* if cpcb == NULL, assuming the close is okay, err = ERR_OK */
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/**
- * Delete the pcb inside a netconn.
- * Called from netconn_delete.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_delconn (data_com_msg * m)
-{
- m->param.err = ERR_OK;
- msg_delete_netconn *_m = (msg_delete_netconn *) m->buffer;
-
- if (0 == (--_m->msg_box_ref))
- {
- /* the aync msg is released inside */
- ss_recycle_conn ((void *) _m, do_try_delconn);
- }
-
- return 0;
-}
-
-/**
- * handle message to send UDP packets.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_send (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- msg_send_buf *_m = (msg_send_buf *) m->buffer;
- if (cpcb == NULL)
- {
- NS_LOG_CTRL (LOG_CTRL_SEND, STACKX, "NSLWIP", NSLOG_ERR,
- "failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- spl_pbuf_free (_m->p);
- _m->p = NULL;
- ASYNC_MSG_FREE (m);
- return -1;
- }
-
- do_send (cpcb, _m);
-
- ASYNC_MSG_FREE (m);
-
- return 0;
-}
-
-/**
- * handle message to send TCP packets.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_write (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- void *tpcb = TCP_PRIVATE_PTR (m);
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
-
- msg_write_buf *_m = (msg_write_buf *) m->buffer;
- if ((tpcb == NULL) || (cpcb == NULL))
- {
- NS_LOG_CTRL (LOG_CTRL_WRITE, STACKX, "NSLWIP", NSLOG_ERR,
- "failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- spl_pbuf_free (_m->p);
- _m->p = NULL;
- ASYNC_MSG_FREE (m);
- return -1;
- }
-
- do_write (cpcb, _m);
-
- return 0;
-}
-
-/**
- * handle message to receive.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_recv (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- msg_recv_buf *_m = (msg_recv_buf *) m->buffer;
- void *tpcb = TCP_PRIVATE_PTR (m);
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
-
- if ((tpcb == NULL) || (cpcb == NULL))
- {
- NS_LOG_CTRL (LOG_CTRL_RECV, STACKX, "NSLWIP", NSLOG_ERR,
- "failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- spl_pbuf_free (_m->p);
- _m->p = NULL;
- ASYNC_MSG_FREE (m);
- return -1;
- }
-
- do_recv (cpcb, _m);
- ASYNC_MSG_FREE (m);
- return 0;
-}
-
-/**
- * handle message to bind local address.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_bind (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
- NSPOL_LOGERR ("failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- m->param.err = ERR_VAL;
- SYNC_MSG_ACK (m);
- return -1;
- }
-
- msg_bind *_m = (msg_bind *) m->buffer;
- do_bind (cpcb, _m);
-
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/**
- * handle message to listen for new connection.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_listen (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
- NSPOL_LOGERR ("failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- m->param.err = ERR_CONN;
- SYNC_MSG_ACK (m);
- return -1;
- }
-
- msg_listen *_m = (msg_listen *) m->buffer;
- do_listen (cpcb, _m);
-
- /* Update since pcb may have been changed */
- //m->param.receiver = (i64)&_m->conn->private_data;
- SYNC_MSG_ACK (m);
- return 0;
-}
-
-/**
- * handle message to set socket option.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_setsockopt (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
-
- NSPOL_LOGERR ("failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- m->param.err = ERR_VAL;
- SYNC_MSG_ACK (m);
- return -1;
- }
-
- msg_setgetsockopt *_m = (msg_setgetsockopt *) m->buffer;
- do_setsockopt_internal (cpcb, _m);
-
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/**
- * handle message to get socket option.
- *
- * @param msg the data_com_msg to handle
- */
-static int
-_do_getsockopt (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
- NSPOL_LOGERR ("failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- m->param.err = ERR_VAL;
- SYNC_MSG_ACK (m);
- return -1;
- }
-
- msg_setgetsockopt *_m = (msg_setgetsockopt *) m->buffer;
- do_getsockopt_internal (cpcb, _m);
-
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/**
- * handle message to free pbuf which never used afterwards by application.
- *
- * @param msg the data_com_msg to handle
- */
-
-static int
-_do_pbuf_free (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- msg_free_buf *_m = (msg_free_buf *) m->buffer;
- do_pbuf_free (_m->buf);
-
- ASYNC_MSG_FREE (m);
-
- return 0;
-}
-
-static int
-_do_getsock_name (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- struct common_pcb *cpcb = COMM_PRIVATE_PTR (m);
- if (cpcb == NULL)
- {
- NSPOL_LOGERR ("failed to find target pcb, drop the message]"
- "module=%u, major=%u, minor=%u",
- m->param.module_type,
- m->param.major_type, m->param.minor_type);
-
- m->param.err = ERR_VAL;
- SYNC_MSG_ACK (m);
- return -1;
- }
-
- msg_getaddrname *_m = (msg_getaddrname *) m->buffer;
- do_getsockname (cpcb, _m);
-
- SYNC_MSG_ACK (m);
-
- return 0;
-}
-
-/* app send its version info to nStackMain */
-static int
-_do_app_touch (data_com_msg * m)
-{
- m->param.err = ERR_OK;
-
- msg_app_touch *_m = (msg_app_touch *) m->buffer;
- do_app_touch (_m);
-
- ASYNC_MSG_FREE (m);
- return 0;
-}
-
-/**
- * process message from sbr module, all the processing function
- * is registered when nstack is up.
- *
- * @param msg the api_msg_msg pointing to the connection
- */
-int
-spl_sbr_process (data_com_msg * m)
-{
- if (m == NULL)
- {
- NSPOL_LOGERR ("message is NULL");
- return -1;
- }
-
- return call_msg_fun (m);
-}
-
-int
-spl_unsupport_process (data_com_msg * m)
-{
- NSPOL_LOGINF (TCPIP_DEBUG, "module_type=%u,major_type=%u,minor_type=%u",
- m->param.module_type, m->param.major_type,
- m->param.minor_type);
- if (MSG_SYN_POST == m->param.op_type)
- {
- m->param.err = ERR_EPROTONOSUPPORT;
- SYNC_MSG_ACK (m);
- }
- else
- {
- ASYNC_MSG_FREE (m);
- }
-
- return -1;
-}
-
-REGIST_MSG_UNSUPPORT_FUN (spl_unsupport_process);
-REGIST_MSG_MODULE_MAJOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- do_sbrmsg);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_NEWCONN, _do_newconn);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_CONNECT, _do_connect);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_CLOSE, _do_close);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_DELCON, _do_delconn);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_SEND, _do_send);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_WRITE, _do_write);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_RECV, _do_recv);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_BIND, _do_bind);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_LISTEN, _do_listen);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_GET_SOCK_OPT, _do_getsockopt);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_SET_SOCK_OPT, _do_setsockopt);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_PBUF_FREE, _do_pbuf_free);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API,
- SPL_API_DO_GETSOCK_NAME, _do_getsock_name);
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_SBR, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_APP_TOUCH, _do_app_touch); /* app send its version info to nStackMain */
diff --git a/stacks/lwip_stack/lwip_src/api/spl_tcpip.c b/stacks/lwip_stack/lwip_src/api/spl_tcpip.c
deleted file mode 100644
index b0b588a..0000000
--- a/stacks/lwip_stack/lwip_src/api/spl_tcpip.c
+++ /dev/null
@@ -1,1547 +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 "spl_opt.h"
-#include <pthread.h>
-#include <sched.h>
-#include <signal.h>
-#include "memp.h"
-#include "mem.h"
-#include "spl_pbuf.h"
-//#include "sockets.h"
-//#include <netinet/in.h>
-
-#include "stackx_spl_share.h"
-#include "spl_api.h"
-#include "spl_tcpip.h"
-#include "init.h"
-#include "stackx/internal_msg.h"
-#include "netif/sc_dpdk.h"
-#include "sharedmemory.h"
-#include "stackx_instance.h"
-#include "netif/common.h"
-//#include "nettool/nettool.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "spl_hal.h"
-#include "spl_sbr.h"
-#include "spl_tcpip.h"
-
-#include "spl_instance.h"
-#include "nsfw_mem_api.h"
-#include "nsfw_msg_api.h"
-#include "configuration_reader.h"
-
-#include "nsfw_ps_api.h"
-#include "alarm_api.h"
-#include "nstack_share_res.h"
-#include "spl_timers.h"
-
-#include "etharp.h"
-#include "raw.h"
-#include "udp.h"
-#include "tcp.h"
-#include "igmp.h"
-#include "memp.h"
-#include "inet.h"
-#include "sys_arch.h"
-
-#include "sys.h"
-
-#define NSTACK_MAIN_MAX_PARA 32
-#define NSTACK_MAIN_MIN_PARA 1
-
-#define DPDK_DEFAULT_EAL_MEM_SIZE (1024)
-
-#define OPT_EAL_MEM_SIZE "--eal-mem-size="
-
-/********************/
-/* extern variables */
-/********************/
-extern mring_handle spl_get_msg_pool ();
-extern mring_handle spl_get_conn_pool ();
-extern u32 spl_get_conn_num ();
-extern err_t ethernet_input (struct pbuf *p, struct netif *netif);
-
-/* tcpip main thread sleep time, configured by user(nStackMain "-sleep" option) */
-extern int g_tcpip_thread_sleep_time;
-
-/* netif related */
-extern struct stackx_port_info *head_used_port_list;
-
-extern u32_t uStackArgIndex;
-
-extern int g_tcpip_thread_stat;
-
-/********************/
-/* global variables */
-/********************/
-
-/* timer thread id */
-sys_thread_t g_timerThread_id = 0;
-
-/*Add an associative mapping relationship to p_stackx_instance based on lcore_id */
-
-int globalArgc = 0;
-
-/* Set different mem args to PAL and EAL */
-char **gArgv = NULL;
-
-int g_dpdk_argc = 0;
-char **g_dpdk_argv = NULL;
-
-/*The sum of the four queue processing messages does not exceed TASK_BURST*/
-static u32 g_highestMboxNum = 12;
-static u32 g_mediumMboxNum = 8;
-static u32 g_lowestMboxNum = 4;
-static u32 g_primaryMboxNum = 8;
-
-/* [set ip_tos2prio size to IPTOS_TOS_MASK >> 1) + 1] */
-u8_t ip_tos2prio[(IPTOS_TOS_MASK >> 1) + 1] = {
- TC_PRIO_BESTEFFORT,
- ECN_OR_COST (FILLER),
- TC_PRIO_BESTEFFORT,
- ECN_OR_COST (BESTEFFORT),
- TC_PRIO_BULK,
- ECN_OR_COST (BULK),
- TC_PRIO_BULK,
- ECN_OR_COST (BULK),
- TC_PRIO_INTERACTIVE,
- ECN_OR_COST (INTERACTIVE),
- TC_PRIO_INTERACTIVE,
- ECN_OR_COST (INTERACTIVE),
- TC_PRIO_INTERACTIVE_BULK,
- ECN_OR_COST (INTERACTIVE_BULK),
- TC_PRIO_INTERACTIVE_BULK,
- ECN_OR_COST (INTERACTIVE_BULK)
-};
-
-/********************/
-/* extern functions */
-/********************/
-extern err_t ethernetif_init (struct netif *pnetif);
-extern int nstack_stackx_init (int flag);
-extern void tcp_sys_rmem_init ();
-extern void ethernetif_packets_input (struct netif *pstnetif);
-
-/********************************/
-/* function forward declaration */
-/********************************/
-
-static inline u32 priority_sched_mbox (struct stackx_stack *share_memory,
- void **box, u32 n);
-static inline char
-rt_tos2priority (u8_t tos)
-{
- return ip_tos2prio[IPTOS_TOS (tos) >> 1];
-}
-
-u64
-timer_get_threadid ()
-{
- return g_timerThread_id;
-}
-
-#if (DPDK_MODULE != 1)
-NSTACK_STATIC inline void
-do_recv_task (struct disp_netif_list *dnlist, u16 index_task)
-{
- struct netifExt *pnetifExt = NULL;
-
- while (dnlist)
- {
- struct netif *currentNetif = dnlist->netif;
- dnlist = dnlist->next;
-
- pnetifExt = getNetifExt (currentNetif->num);
- if (NULL == pnetifExt)
- return;
-
- if (currentNetif != NULL && pnetifExt->num_packets_recv > index_task)
- {
- ethernetif_packets_input (currentNetif);
- }
- }
-}
-
-static inline int
-is_valid_sleep_time (int sleep_time)
-{
-#define TCP_IP_THREAD_MAX_SLEEP_TIME 500
- if ((sleep_time < 0) || (sleep_time > TCP_IP_THREAD_MAX_SLEEP_TIME))
- {
- return 0;
- }
-
- return 1;
-}
-
-static int
-thread_init ()
-{
- sigset_t mask;
-
- if (0 != sigemptyset (&mask))
- {
- NSTCP_LOGERR ("sigemptyset function call error");
- return -1;
- }
-
- if (0 != sigaddset (&mask, SIGRTMIN))
- {
- NSTCP_LOGERR ("sigaddset function call error");
- return -1;
- }
-
- if ((pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0)
- || (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) != 0))
- {
- NSTCP_LOGERR ("pthread setcancel function call error");
- return -1;
- }
-
- if (pthread_sigmask (SIG_BLOCK, &mask, NULL) != 0)
- {
- NSPOL_LOGERR ("pthread_sigmask function call error");
- return -1;
- }
-
- return 0;
-}
-
-alarm_result
-spl_socket_resource_check_func (void)
-{
-
- mring_handle conn_ring = spl_get_conn_pool ();
- unsigned int rate_use = 0;
- alarm_result ret_alarm;
- u32 ring_size = 0, ring_not_used_count = 0;
- u32 socket_num = spl_get_conn_num ();
-
- ring_size = nsfw_mem_ring_size (conn_ring);
-
- if (0 == socket_num)
- {
- /* assign a valid id, then return */
- ret_alarm.alarm_id_get = ALARM_EVENT_MAX;
- return ret_alarm;
- }
-
- ring_not_used_count = nsfw_mem_ring_using_count (conn_ring);
-
- rate_use = (ring_size - ring_not_used_count) * 100 / socket_num;
-
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
-
- if (rate_use >= USEAGE_HIGHT)
- {
- ret_alarm.alarm_flag_get = ALARM_PRODUCT;
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
- NSPOL_LOGWAR (TCPIP_DEBUG,
- "app using too much socket resources,the rate is bigger than 80%");
- }
- else if (rate_use <= USEAGE_LOW)
- {
- ret_alarm.alarm_flag_get = ALARM_CLEAN;
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
- }
- else
- {
- ret_alarm.alarm_id_get = ALARM_EVENT_MAX;
- }
-
- ret_alarm.alarm_reason_get = ALARM_REASON_SOCKET;
-
- return ret_alarm;
-
-}
-
-alarm_result
-spl_msg_buf_resource_check_func (void)
-{
-
- mring_handle msg_ring = spl_get_msg_pool ();
- unsigned int rate_use = 0;
- alarm_result ret_alarm;
- u32 ring_size = 0, ring_not_used_count = 0;
-
- ring_size = nsfw_mem_ring_size (msg_ring);
-
- if (0 == ring_size)
- {
- /* assign a valid id, then return */
- ret_alarm.alarm_id_get = ALARM_EVENT_MAX;
- return ret_alarm;
- }
-
- ring_not_used_count = nsfw_mem_ring_using_count (msg_ring);
-
- rate_use = (ring_size - ring_not_used_count) * 100 / ring_size;
-
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
-
- if (rate_use >= USEAGE_HIGHT)
- {
- ret_alarm.alarm_flag_get = ALARM_PRODUCT;
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
- }
- else if (rate_use <= USEAGE_LOW)
- {
- ret_alarm.alarm_flag_get = ALARM_CLEAN;
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_RESOURCE_ALARM;
- }
- else
- {
- ret_alarm.alarm_id_get = ALARM_EVENT_MAX;
- }
-
- ret_alarm.alarm_reason_get = ALARM_REASON_MSG_BUF;
-
- return ret_alarm;
-
-}
-
-NSTACK_STATIC int
-tcpip_thread_init ()
-{
- if (thread_init () != 0)
- {
- return -1;
- }
-
- if (!is_valid_sleep_time (g_tcpip_thread_sleep_time))
- {
- g_tcpip_thread_sleep_time = 0;
- }
-
- alarm_para tcp_alarm_para;
- tcp_alarm_para.period_alarm.time_length = 5; /* 5 second period */
- tcp_alarm_para.alarm_reason_count = 2; /*both resource */
- tcp_alarm_para.func_alarm_check_period[0] = spl_socket_resource_check_func;
- tcp_alarm_para.alarm_reason_set[0] = ALARM_REASON_SOCKET;
- tcp_alarm_para.func_alarm_check_period[1] = spl_msg_buf_resource_check_func;
- tcp_alarm_para.alarm_reason_set[1] = ALARM_REASON_MSG_BUF;
- (void) ns_reg_alarm (ALARM_EVENT_NSTACK_RESOURCE_ALARM, ALARM_PERIOD_CHECK,
- &tcp_alarm_para);
-
- ns_send_init_alarm (ALARM_EVENT_NSTACK_RESOURCE_ALARM);
-
- printmeminfo ();
- return 0;
-}
-
-sys_mbox_t
-get_primary_box ()
-{
- return &p_def_stack_instance->lstack.primary_mbox;
-}
-
-NSTACK_STATIC inline u16
-tcpip_netif_recv (struct disp_netif_list * nif_list)
-{
-
- u16 num_recv_task = 0, netif_packet_num;
-
- struct netif *tmpnetif = NULL;
- struct netifExt *pnetifExt = NULL;
-
- while (nif_list)
- {
- tmpnetif = nif_list->netif;
-
- netif_packet_num = spl_hal_recv (tmpnetif, 0);
- pnetifExt = getNetifExt (tmpnetif->num);
- if (NULL == pnetifExt)
- return 0;
-
- /* store the packet number in each netif */
- pnetifExt->num_packets_recv = netif_packet_num;
-
- /**
- * num_recv_task is the maximum packets of the netif among
- * all the netifs.
- */
- if (num_recv_task < netif_packet_num)
- {
- num_recv_task = netif_packet_num;
- }
-
- nif_list = nif_list->next;
- }
-
- return num_recv_task;
-}
-
-NSTACK_STATIC inline void
-no_task_in_one_loop ()
-{
-}
-
-#endif
-
-/**
- * Pass a received packet to tcpip_thread for input processing
- *
- * @param p the received packet, p->payload pointing to the Ethernet header or
- * to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or
- * SPL_NETIF_FLAG_ETHERNET flags)
- * @param inp the network interface on which the packet was received
- */
-err_t
-spl_tcpip_input (struct pbuf *p, struct netif *inp)
-{
- err_t ret;
- NSPOL_LOGINF (TCPIP_DEBUG, "PACKET]p=%p,inp=%p", (void *) p, (void *) inp);
- print_pbuf_payload_info (p, false);
-
- /* every netif has been set NETIF_FLAG_ETHARP flag, no need else branch */
- ret = ethernet_input (p, inp);
- return ret;
-}
-
-int
-_do_spl_callback_msg (data_com_msg * m)
-{
- NSPOL_LOGDBG (TCPIP_DEBUG, "tcpip_thread: CALLBACK]msg=%p", (void *) m);
-
- m->param.err = ERR_OK;
-
- msg_internal_callback *callback = (msg_internal_callback *) (m->buffer);
- if (!callback->function)
- {
- NSTCP_LOGERR ("function ptr is null in SPL_TCPIP_MSG_CALLBACK msg");
- ASYNC_MSG_FREE (m);
- return 0;
- }
-
- callback->function (callback->ctx);
- ASYNC_MSG_FREE (m);
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : get_msgbox
-* Description : According to the socket tos value to determine which priority queue to send
-* Input : struct stackx_stack *sharedmemory, struct netconn *conn, enum api_msg_type type
-* Output : Queue pointer
-* Return Value : Queue pointer
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-struct queue *
-get_msgbox (int tos)
-{
- struct stackx_stack *sharedmemory = &p_def_stack_instance->lstack;
-
- if ((MSG_PRIO_QUEUE_NUM < 3) || (0 == tos))
- {
- return &sharedmemory->primary_mbox;
- }
-
- char prio = rt_tos2priority ((u8_t) tos);
- if ((TC_PRIO_INTERACTIVE == prio))
- {
- NSPOL_LOGDBG (SOCKETS_DEBUG, "sent to the highest mbox.....");
- return &sharedmemory->priority_mbox[0];
- }
- else if ((TC_PRIO_BESTEFFORT == prio) || (TC_PRIO_INTERACTIVE_BULK == prio))
- {
- NSPOL_LOGDBG (SOCKETS_DEBUG, "sent to the medium mbox.....");
- return &sharedmemory->priority_mbox[1];
- }
- else if ((TC_PRIO_BULK == prio) || (TC_PRIO_FILLER == prio))
- {
- NSPOL_LOGDBG (SOCKETS_DEBUG, "sent to the lowest mbox.....");
- return &sharedmemory->priority_mbox[2];
- }
-
- NSPOL_LOGDBG (SOCKETS_DEBUG, "sent to the primary mbox.....");
- return &sharedmemory->primary_mbox;
-}
-
-/*****************************************************************************
-* Prototype : priority_sched_mbox
-* Description : According to the priority from the message queue to take
-* the message to deal with each cycle to take the total number of messages
-* not exceed to TASK_BURST
-* Input : struct stackx_stack *sharedmemory, struct netconn *conn, enum api_msg_type type
-* Output : Queue pointer
-* Return Value : Queue pointer
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline u32
-priority_sched_mbox (struct stackx_stack *share_memory, void **box, u32 n)
-{
- /* high:primary:medium:low -> 3:2:2:1(total:TASK_BURST) */
- if (unlikely
- ((g_highestMboxNum + g_mediumMboxNum + g_primaryMboxNum +
- g_lowestMboxNum) != n))
- {
- g_mediumMboxNum = n >> 2;
- g_lowestMboxNum = n >> 3;
- g_primaryMboxNum = n >> 2;
- g_highestMboxNum =
- n - g_mediumMboxNum - g_primaryMboxNum - g_lowestMboxNum;
- }
-
- u32 highestMboxNum = g_highestMboxNum;
- u32 primaryMboxNum = g_primaryMboxNum;
- u32 lowestMboxNum = g_lowestMboxNum;
- u32 mediumMboxNum = g_mediumMboxNum;
-
- u32 totalNum = 0;
- u32 num = 0;
- u32 oldLowestNum = 0;
-
- num = nsfw_mem_ring_dequeuev (share_memory->priority_mbox[0].llring,
- (box + totalNum), highestMboxNum);
- if (unlikely (num > highestMboxNum))
- {
- num = highestMboxNum;
- NSTCP_LOGERR
- ("something wrong:num>highestMboxNum]num=%u,highestMboxNum=%u", num,
- highestMboxNum);
- }
-
- totalNum += num;
-
- u32 temp = highestMboxNum - num;
- /* bisect the left number of highest */
- primaryMboxNum += (temp >> 1);
- mediumMboxNum += temp - (temp >> 1);
-
- num = nsfw_mem_ring_dequeuev (share_memory->priority_mbox[1].llring,
- (box + totalNum), mediumMboxNum);
- if (unlikely (num > mediumMboxNum))
- {
- num = mediumMboxNum;
- NSTCP_LOGERR
- ("something wrong.num>mediumMboxNum]num=%u,mediumMboxNum=%u", num,
- mediumMboxNum);
- }
-
- totalNum += num;
- primaryMboxNum += mediumMboxNum - num; //occupy the left number of medium
-
- /* dynamically adjust g_mediumMboxNum and g_highestMboxNum, according to 'num' */
- oldLowestNum = g_mediumMboxNum;
- if (0 == num)
- {
- g_mediumMboxNum = 1;
- }
- else if (num < g_mediumMboxNum)
- {
- g_mediumMboxNum = num;
- }
- else
- {
- g_mediumMboxNum = n >> 2;
- }
-
- g_highestMboxNum += oldLowestNum - g_mediumMboxNum;
-
- num = nsfw_mem_ring_dequeuev (share_memory->primary_mbox.llring,
- (box + totalNum), primaryMboxNum);
- if (unlikely (num > primaryMboxNum))
- {
- num = primaryMboxNum;
- NSTCP_LOGERR
- ("something wrong.num>primaryMboxNum]num=%u,primaryMboxNum=%u", num,
- primaryMboxNum);
- }
-
- totalNum += num;
- lowestMboxNum += primaryMboxNum - num; //occupy the left number of primary
-
- /* dynamically adjust g_primaryMboxNum and g_highestMboxNum, according to 'num' */
- oldLowestNum = g_primaryMboxNum;
- if (0 == num)
- {
- g_primaryMboxNum = 1;
- }
- else if (num < g_primaryMboxNum)
- {
- g_primaryMboxNum = num;
- }
- else
- {
- g_primaryMboxNum = n >> 2;
- }
-
- g_highestMboxNum += oldLowestNum - g_primaryMboxNum;
-
- if (lowestMboxNum > (n - totalNum))
- {
- lowestMboxNum = n - totalNum;
- }
-
- num = nsfw_mem_ring_dequeuev (share_memory->priority_mbox[2].llring,
- (box + totalNum), lowestMboxNum);
- if (unlikely (num > lowestMboxNum))
- {
- num = lowestMboxNum;
- NSTCP_LOGERR
- ("something wrong.num>lowestMboxNum]num=%u,lowestMboxNum=%u", num,
- lowestMboxNum);
- }
-
- totalNum += num;
-
- /* dynamically adjust g_lowestMboxNum and g_highestMboxNum, according to 'num' */
- oldLowestNum = g_lowestMboxNum;
- if (0 == num)
- {
- g_lowestMboxNum = 1;
- }
- else if (num < g_lowestMboxNum)
- {
- g_lowestMboxNum = num;
- }
- else
- {
- g_lowestMboxNum = n >> 3;
- }
-
- g_highestMboxNum += oldLowestNum - g_lowestMboxNum;
-
- return totalNum;
-}
-
-/**
- * call ltt_apimsg in STACKX TIMER THREAD
- *
- * @param h function to be called on timeout
- * @param arg argument to pass to timeout function h
- * @return error code given back by the function that was called
- */
-err_t
-ltt_apimsg (sys_timeout_handler h, void *arg)
-{
- data_com_msg *p_msg_entry;
- sys_mbox_t mbox = get_primary_box ();
- if (sys_mbox_valid (&mbox))
- {
- if (-1 == spl_msg_malloc (&p_msg_entry))
- {
- NSPOL_LOGERR ("ltt_apimsg:spl_msg_malloc failed.");
- return -1;
- }
-
- p_msg_entry->param.module_type = MSG_MODULE_TIMER;
- p_msg_entry->param.major_type = SPL_TCPIP_MSG_TIMER;
- p_msg_entry->param.minor_type = TIMER_MSG_TIMEOUT;
- p_msg_entry->param.op_type = MSG_ASYN_POST;
-
- sys_sem_init (&p_msg_entry->param.op_completed);
-
- msg_timer *tmsg = (msg_timer *) (p_msg_entry->buffer);
- tmsg->act = h;
- tmsg->arg = arg;
-
- if (msg_post (p_msg_entry, mbox->llring) < 0)
- {
- NSPOL_LOGERR
- ("msg post is failed]module_type=%u, major_type=%u, minor_type=%u",
- p_msg_entry->param.module_type, p_msg_entry->param.major_type,
- p_msg_entry->param.minor_type);
- spl_msg_free (p_msg_entry);
- return ERR_VAL;
- }
-
- return ERR_OK;
- }
-
- NSPOL_LOGERR ("mbox is invalid");
- return ERR_VAL;
-}
-
-int
-_do_spl_timer_msg (data_com_msg * m)
-{
- NSPOL_LOGDBG (TESTSOCKET_DEBUG | STACKX_DBG_TRACE,
- "the msg is from TIMER module, minor(%u)",
- m->param.minor_type);
- return 0;
-}
-
-static int
-_do_timeout_handle (data_com_msg * m)
-{
- m->param.err = ERR_OK;
- msg_timer *tmo_msg = (msg_timer *) m->buffer;
- if (!tmo_msg->act)
- {
- NSTCP_LOGERR ("TIMER_MSG_TIMEOUT msg act is NULL");
- ASYNC_MSG_FREE (m);
- return -1;
- }
-
- timeout_phandler (tmo_msg->act, tmo_msg->arg);
- ASYNC_MSG_FREE (m);
- return 0;
-}
-
-static int
-_do_clear_timer (data_com_msg * m)
-{
- NSTCP_LOGDBG ("TIMER_CLEAR API]msg=%p", (void *) m);
-
- msg_timer *handle = (msg_timer *) (m->buffer);
- if (!handle->act)
- {
- NSTCP_LOGERR ("function ptr is null in TIMER_MSG_CLEAR msg");
- SET_MSG_ERR (m, ERR_VAL);
- return 0;
- }
-
- //stackxTcpPcbClearTimer((struct tcp_pcb *)handle->act, (unsigned long)handle->arg);
- spl_msg_free (m);
-
- return 0;
-}
-
-err_t
-ltt_clearTmrmsg (void *pcb, void *arg)
-{
- data_com_msg *p_msg_entry;
- sys_mbox_t mbox = get_primary_box ();
- if (sys_mbox_valid (&mbox))
- {
- if (-1 == spl_msg_malloc (&p_msg_entry) || (NULL == p_msg_entry))
- {
- NSPOL_LOGERR ("ltt_clearTmrmsg:spl_msg_malloc failed.");
- return -1;
- }
-
- p_msg_entry->param.module_type = MSG_MODULE_TIMER;
- p_msg_entry->param.major_type = SPL_TCPIP_MSG_TIMER;
- p_msg_entry->param.minor_type = TIMER_MSG_CLEAR;
- p_msg_entry->param.op_type = MSG_ASYN_POST;
- p_msg_entry->param.receiver = 0;
- sys_sem_init (&p_msg_entry->param.op_completed);
-
- msg_timer *tmo = (msg_timer *) (p_msg_entry->buffer);
- tmo->act = pcb;
- tmo->arg = arg;
-
- if (msg_post (p_msg_entry, mbox->llring) < 0)
- {
- NSPOL_LOGERR
- ("msg post is failed]module_type=%u, major_type=%u, minor_type=%u",
- p_msg_entry->param.module_type, p_msg_entry->param.major_type,
- p_msg_entry->param.minor_type);
- spl_msg_free (p_msg_entry);
- return ERR_VAL;
- }
-
- return ERR_OK;
- }
-
- NSPOL_LOGERR ("mbox is invalid");
- return ERR_VAL;
-}
-
-#if STACKX_NETIF_API
-err_t
-tcpip_netif_post (data_com_msg * m)
-{
- err_t err = ERR_OK;
- sys_mbox_t mbox = get_primary_box ();
-
- if (NULL == mbox || !sys_mbox_valid (&mbox))
- {
- NSPOL_LOGERR ("mbox not initialed well");
- err = ERR_MEM;
- goto err_exit;
- }
-
- if (NULL == mbox->llring)
- {
- int tryCount = 0;
-#define TCP_NETIF_WAITINIT_MAX_COUNT 10
- NSPOL_LOGWAR (TCPIP_DEBUG, "mbox->llring not initialed yet...");
- sys_sleep_ns (0, 100000000);
- while (!mbox->llring && (++tryCount < TCP_NETIF_WAITINIT_MAX_COUNT))
- {
- NSPOL_LOGWAR (TCPIP_DEBUG, "mbox->llring not initialed yet...");
- sys_sleep_ns (0, 100000000);
- }
-
- if (NULL == mbox->llring)
- {
- NSPOL_LOGERR ("failed to get a valid mbox->llring");
- err = ERR_MEM;
- goto err_exit;
- }
- }
-
- NSPOL_LOGINF (TCPIP_DEBUG, "post tcpip_netif_msg...");
-
- if (msg_post_with_lock_rel (m, mbox->llring) < 0)
- {
- err = ERR_VAL;
- }
- else
- {
- err = m->param.err;
- }
-
-err_exit:
- /* it's a sync message */
- spl_msg_free (m);
- return err;
-}
-
-/**
- * Much like tcpip_apimsg, but calls the lower part of a netifapi_*
- * function.
- *
- * @param netifapimsg a struct containing the function to call and its parameters
- * @return error code given back by the function that was called
- */
-err_t
-tcpip_netif_add (msg_add_netif * tmp)
-{
- data_com_msg *p_msg_entry = NULL;
- msg_add_netif *nmsg = NULL;
-
- if (spl_msg_malloc (&p_msg_entry) == -1)
- {
- NSPOL_LOGERR ("tcpip_netifapi:spl_msg_malloc failed.");
- return ERR_MEM;
- }
-
- p_msg_entry->param.module_type = MSG_MODULE_HAL;
- p_msg_entry->param.major_type = SPL_TCPIP_MSG_NETIFAPI;
- p_msg_entry->param.minor_type = NETIF_DO_ADD;
- p_msg_entry->param.op_type = MSG_SYN_POST;
- p_msg_entry->param.receiver = 0;
- sys_sem_init (&p_msg_entry->param.op_completed);
-
- nmsg = (msg_add_netif *) p_msg_entry->buffer;
- nmsg->function = tmp->function;
- nmsg->netif = tmp->netif;
- nmsg->ipaddr = tmp->ipaddr;
- nmsg->netmask = tmp->netmask;
- nmsg->gw = tmp->gw;
- nmsg->state = tmp->state;
- nmsg->init = tmp->init;
- nmsg->input = tmp->input;
- nmsg->voidfunc = tmp->voidfunc;
-
- return tcpip_netif_post (p_msg_entry);
-}
-
-#endif /* STACKX_NETIF_API */
-
-/* Added for congestion control, maybe not used end */
-
-extern err_t init_ptimer (void);
-extern struct cfg_item_info g_cfg_item_info[CFG_SEG_MAX][MAX_CFG_ITEM];
-
-/*=========== set share config for nStackMain =============*/
-static inline mzone_handle
-create_mem_zone (nsfw_mem_zone * zone_info)
-{
- return nsfw_mem_zone_create (zone_info);
-}
-
-static inline int
-set_zone_info (nsfw_mem_zone * zone_info, nsfw_mem_name * name_info, u32 len)
-{
- if (EOK !=
- MEMCPY_S (&(zone_info->stname), sizeof (nsfw_mem_name), name_info,
- sizeof (nsfw_mem_name)))
- {
- NSPOL_DUMP_LOGERR ("create pool failed, MEMCPY_S failed.");
- return -1;
- }
-
- zone_info->length = len;
- zone_info->isocket_id = NSFW_SOCKET_ANY;
-
- return 0;
-}
-
-int
-set_share_config ()
-{
- static nsfw_mem_name g_cfg_mem_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, NSTACK_SHARE_CONFIG };
-
- nsfw_mem_zone zone_info;
- if (set_zone_info (&zone_info, &g_cfg_mem_info, get_cfg_share_mem_size ()) <
- 0)
- {
- return -1;
- }
-
- mzone_handle base_cfg_mem = create_mem_zone (&zone_info);
- if (NULL == base_cfg_mem)
- {
- NSPOL_LOGERR ("get config share mem failed.");
- return -1;
- }
-
- if (set_share_cfg_to_mem (base_cfg_mem) < 0)
- {
- NSPOL_LOGERR ("set share config failed.");
- return -1;
- }
-
- return 0;
-}
-
-int
-init_by_tcpip_thread ()
-{
- if (spl_init_app_res () != 0)
- {
- NSPOL_LOGERR ("spl_init_app_res failed");
- return -1;
- }
-
- if (init_instance () != 0)
- {
- return -1;
- }
- if (tcpip_thread_init () != 0)
- {
- NSTCP_LOGERR ("tcpip_thread_init failed!");
- return -1;
- }
-
- init_stackx_lwip ();
-
- return 0;
-}
-
-void
-spl_tcpip_thread (void *arg)
-{
- g_tcpip_thread_stat = 1;
-
- if (init_by_tcpip_thread () != 0)
- {
- return;
- }
-
- struct stackx_stack *share_memory = &p_def_stack_instance->lstack;
- struct disp_netif_list **iflist = &p_def_stack_instance->netif_list;
-
- u32 run_count = 0;
- u16 task_loop;
- u16 num_recv_task = 0, num_send_timer_task = 0;
- u16 index_task = 0;
- //int tcpip_thread_sleep_interval = g_tcpip_thread_sleep_time * 1000;
- void *task_queue[TASK_BURST];
- data_com_msg *msg;
-
- while (1)
- {
- /* try to receive packet from hal layer */
- num_recv_task = tcpip_netif_recv (*iflist);
-
- /* try to receive message from sbr layer */
- num_send_timer_task = priority_sched_mbox (share_memory,
- task_queue, TASK_BURST);
-
- if (num_recv_task)
- {
- NSPOL_LOGINF (TCPIP_DEBUG, "num_recv_task %d", num_recv_task);
- }
-
- /* Statistics the total number of messages */
-
- /* Separate statistics on socket api messages */
- /* handle the request from upper layer and lower layer one by one */
- task_loop = (num_send_timer_task > num_recv_task ?
- num_send_timer_task : num_recv_task);
- if (task_loop == 0)
- {
- no_task_in_one_loop ();
-
- if (run_count++ > 20)
- {
- //sys_sleep_ns (0, tcpip_thread_sleep_interval);
- }
- continue;
- }
-
- run_count = 0;
- index_task = 0;
-
- /* at least one task to be handled */
- while (task_loop > index_task)
- {
- /* handle one packet from hal layer (for multi-nic case, do it for each) */
- if (num_recv_task > index_task)
- {
- do_recv_task (*iflist, index_task);
- }
-
- /* handle one message from sbr layer */
- if (num_send_timer_task > index_task)
- {
- msg = (data_com_msg *) (task_queue[index_task]);
-
- spl_process (msg);
- }
-
- do_update_pcbstate ();
-
- index_task++;
- }
- }
-}
-
-int
-create_tcpip_thread ()
-{
- int ret;
- u64 arg = 0;
-
- /* main tcpip thread */
- char thread_name[32] = TCPIP_THREAD_NAME;
-
- sys_thread_t thread = sys_thread_new (thread_name, spl_tcpip_thread,
- (void *) arg,
- TCPIP_THREAD_STACKSIZE,
- g_cfg_item_info[CFG_SEG_PRI]
- [CFG_SEG_THREAD_PRI_PRI].value);
-
- cpu_set_t cpuset;
- CPU_ZERO (&cpuset); /*lint !e534 */
- CPU_SET (g_nstack_bind_cpu, &cpuset); /*lint !e522 */
- ret = pthread_setaffinity_np (thread, sizeof (cpuset), &cpuset);
- if (ret != 0)
- {
- NSPOL_LOGERR ("pthread_setaffinity_np failed]thread_name=%s,ret=%d",
- TCPIP_THREAD_NAME, ret);
- }
-
- return 0;
-}
-
-int
-create_timer_thread ()
-{
-#if 1
- if (init_ptimer () != ERR_OK)
- {
- NSPOL_LOGERR ("init_ptimer failed");
- return -1;
- }
-
- sys_thread_t thread_timer =
- sys_thread_new (PTIMER_THREAD_NAME, ptimer_thread, NULL,
- TCPIP_THREAD_STACKSIZE, 0);
- cpu_set_t cpuset_timer;
- CPU_ZERO (&cpuset_timer);
- CPU_SET (1, &cpuset_timer);
- int ret = pthread_setaffinity_np (thread_timer, sizeof (cpuset_timer),
- &cpuset_timer);
- if (ret != 0)
- {
- NSPOL_LOGERR ("TCP init Timer Trhead Failed!");
- }
-
- g_timerThread_id = thread_timer;
-#endif
- return 0;
-}
-
-int
-init_ip_module_reader ()
-{
- output_api api = { 0 };
- api.post_to = post_ip_module_msg;
- api.add_netif_ip = add_netif_ip;
- api.del_netif_ip = del_netif_ip;
- regist_output_api (&api);
-
- if (init_configuration_reader () < 0)
- {
- NSPOL_LOGERR ("init_configuration_reader failed");
- return -1;
- }
-
- return 0;
-}
-
-extern int init_unmatch_version (void);
-extern int init_stackx_global_tick (void);
-
-int
-init_by_main_thread ()
-{
- NSPOL_LOGINF (TCPIP_DEBUG, "init_by_main_thread start version 1.4");
-
- uStackArgIndex++;
- if (spl_hal_init (g_dpdk_argc, (char **) g_dpdk_argv) < 0)
- {
- NSPOL_LOGERR ("spl_hal_init failed");
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 1");
-
- if (init_unmatch_version () != 0)
- {
- return -1;
- }
-
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 2");
- if (init_stackx_global_tick () != 0)
- {
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 3");
-
- if (spl_init_group_array () != 0)
- {
- NSPOL_LOGERR ("spl_init_group_array failed");
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 4");
-
- if (set_share_config () != 0)
- {
- NSPOL_LOGERR ("set_share_config failed.");
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 5");
-
- if (create_timer_thread () != 0)
- {
- //NSPOL_LOGERR(TCPIP_DEBUG,"init_timer_thread failed.");
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 6");
-
- if (create_tcpip_thread () != 0)
- {
- NSPOL_LOGERR ("init_tcpip_thread failed.");
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage 7");
-
- if (init_ip_module_reader () != 0)
- {
- return -1;
- }
- NSPOL_LOGINF (TCPIP_DEBUG, "stage end");
-
- return 0;
-}
-
-void
-create_netif (struct stackx_port_info *p_port_info)
-{
- int ret;
- struct spl_ip_addr ip, mask, gw;
- struct netifExt *netifEx = NULL;
- struct netif *netif = malloc (sizeof (struct netif));
- if (!netif)
- {
- NSPOL_LOGERR ("malloc failed");
- return;
- }
-
- if (MEMSET_S (netif, sizeof (struct netif), 0, sizeof (struct netif)) < 0)
- {
- NSPOL_LOGERR ("MEMSET_S failed");
- goto error;
- }
-
- NSPOL_LOGINF (TCPIP_DEBUG, "I get netif]ip=%s,gw=%s,mask=%s,name=%c %c",
- p_port_info->linux_ip.ip_addr_linux,
- p_port_info->linux_ip.ip_addr_linux,
- p_port_info->linux_ip.mask_linux,
- netif->name[0], netif->name[1]);
-
- if (inet_aton (p_port_info->linux_ip.ip_addr_linux, &ip)
- && inet_aton (p_port_info->linux_ip.ip_addr_linux, &gw)
- && inet_aton (p_port_info->linux_ip.mask_linux, &mask))
- {
- ret =
- spl_netifapi_netif_add (netif, &ip, &mask, &gw, NULL, ethernetif_init,
- spl_tcpip_input, netif_set_up);
- if (ERR_OK != ret)
- {
- NSPOL_LOGERR ("netifapi_netif_add failed]ret=%d", ret);
- goto error;
- }
-#if 1
- if (0 != netifExt_add (netif))
- return;
-
-#endif
- netifEx = getNetifExt (netif->num);
- if (NULL == netifEx)
- return;
-
- netifEx->hdl = p_port_info->linux_ip.hdl;
- ret =
- STRCPY_S (netifEx->if_name, sizeof (netifEx->if_name),
- p_port_info->linux_ip.if_name);
- if (EOK != ret)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", ret);
- goto error;
- }
- return;
- }
-
-error:
- free (netif);
-}
-
-int
-post_ip_module_msg (void *arg, ip_module_type Type,
- ip_module_operate_type operate_type)
-{
- data_com_msg *p_msg_entry;
- msg_ip_module *imsg;
- sys_mbox_t mbox = get_primary_box ();
-
- if (!mbox)
- {
- NSOPR_LOGERR ("get_cur_mbox failed");
- return ERR_MEM;
- }
-
- if (sys_mbox_valid (&mbox))
- {
- if (spl_msg_malloc (&p_msg_entry) == -1)
- {
- NSOPR_LOGERR ("ip_route_apimsg:spl_msg_malloc failed.");
- return ERR_MEM;
- }
-
- sys_sem_init (&p_msg_entry->param.op_completed);
- p_msg_entry->param.module_type = MSG_MODULE_IP;
- p_msg_entry->param.op_type = MSG_SYN_POST;
-
- imsg = (msg_ip_module *) (p_msg_entry->buffer);
- imsg->arg = arg;
- imsg->type = Type;
- imsg->operate_type = operate_type;
-
- NSOPR_LOGINF ("post ip_module msg to tcpip_thread]action=%d,type=%d",
- operate_type, Type);
-
- if (msg_post (p_msg_entry, mbox->llring) != 0)
- {
- NSOPR_LOGERR
- ("msg_post failed,this can not happen]action=%d,type=%d",
- operate_type, Type);
- }
-
- spl_msg_free (p_msg_entry);
-
- return ERR_OK;
- }
-
- NSOPR_LOGERR ("mbox is invalid");
- return ERR_VAL;
-}
-
-int
-process_ip_module_msg (void *arg, ip_module_type module_type,
- ip_module_operate_type operate_type)
-{
- int retval = process_configuration (arg, module_type, operate_type);
-
- NSOPR_LOGINF ("tcpip_thread: ip_module cmd exec over, send SYNC_MSG_ACK");
- return retval;
-}
-
-int
-init_new_network_configuration ()
-{
- if (spl_hal_port_init () < 0)
- {
- return -1;
- }
-
- return 0;
-}
-
-static int
-_process_ip_module_msg (data_com_msg * m)
-{
- m->param.err = ERR_OK;
- msg_ip_module *_m = (msg_ip_module *) m->buffer;
- int ret = process_ip_module_msg (_m->arg, _m->type, _m->operate_type);
- SYNC_MSG_ACK (m);
- return ret;
-}
-
-int
-spl_post_msg (u16 mod, u16 maj, u16 min, u16 op, char *data, u16 data_len,
- u32 src_pid)
-{
- data_com_msg *p_msg_entry;
-
- sys_mbox_t mbox = get_primary_box ();
- if (!sys_mbox_valid (&mbox))
- {
- NSPOL_LOGERR
- ("get mbox null!]mod=%u,maj=%u,min=%u,op=%u,data=%p,len=%u", mod, maj,
- min, op, data, data_len);
- return ERR_MEM;
- }
-
- if (spl_msg_malloc (&p_msg_entry) == -1)
- {
- NSPOL_LOGERR ("get msg null!]mod=%u,maj=%u,min=%u,op=%u,data=%p,len=%u",
- mod, maj, min, op, data, data_len);
- return ERR_MEM;
- }
-
- sys_sem_init (&p_msg_entry->param.op_completed);
- p_msg_entry->param.module_type = mod;
- p_msg_entry->param.major_type = maj;
- p_msg_entry->param.minor_type = min;
- p_msg_entry->param.op_type = op;
- p_msg_entry->param.src_pid = src_pid;
-
- int retVal;
- if (NULL != data)
- {
- retVal =
- MEMCPY_S ((char *) p_msg_entry->buffer, sizeof (p_msg_entry->buffer),
- data, data_len);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("MEMCPY_S failed %d.", retVal);
- spl_msg_free (p_msg_entry);
- return ERR_MEM;
- }
- }
-
- if (msg_post_with_lock_rel (p_msg_entry, mbox->llring) != 0)
- {
- NSPOL_LOGERR
- ("post msg error!]mod=%u,maj=%u,min=%u,op=%u,data=%p,len=%u", mod,
- maj, min, op, data, data_len);
- spl_msg_free (p_msg_entry);
- return ERR_MEM;
- }
-
- if (MSG_SYN_POST == op)
- {
- spl_msg_free (p_msg_entry);
- }
-
- NSOPR_LOGDBG ("post msg suc!]mod=%u,maj=%u,min=%u,op=%u,data=%p,len=%u",
- mod, maj, min, op, data, data_len);
- return ERR_OK;
-}
-
-/*
-* Added by eliminate duplicated code degree, the function is moved to the public places
-*adjust memory size for pal and eal mem size: this func do the following things:
-*1. copy argv to gArgv and g_dpdk_argv
-*2. remove OPT_EAL_MEM_SIZE option so that the rtp and rte options process won't reprt unrecognized option error.
-*3. set eal mem size and pal_mem_size = mem - eal_mem_size
-*/
-int
-adjust_mem_arg (int argc, char *argv[])
-{
- int i = 0;
- int j = 0;
- int retVal;
- char *tmp = NULL;
- char *tmp2 = NULL;
- int arg_mem_index = -1;
- char *saveptr1 = NULL;
- int mem_size = 0;
- int mem_size_parsed = 0; // if multi -m argument is set, then only deal with the first one
- int eal_mem_size = DPDK_DEFAULT_EAL_MEM_SIZE; // Default
-
- if ((argc < NSTACK_MAIN_MIN_PARA) || (argc > NSTACK_MAIN_MAX_PARA))
- {
- NSPOL_LOGERR ("The number of parameters is incorrect");
- return -1;
- }
-
- globalArgc = argc;
- g_dpdk_argc = argc;
- gArgv = (char **) malloc (sizeof (char *) * argc);
- if (gArgv == NULL)
- {
- NSPOL_LOGERR ("Failed to alloc memory for adjust mem args\n");
- goto ERROR_INIT;
- }
-
- g_dpdk_argv = (char **) malloc (sizeof (char *) * argc);
- if (g_dpdk_argv == NULL)
- {
- NSPOL_LOGERR ("Failed to alloc memory for adjust mem args\n");
- goto ERROR_INIT;
- }
-
- retVal =
- MEMSET_S (gArgv, sizeof (char *) * argc, 0, sizeof (char *) * argc);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("MEMSET_S failed %d.", retVal);
- goto ERROR_INIT;
- }
- retVal =
- MEMSET_S (g_dpdk_argv, sizeof (char *) * argc, 0, sizeof (char *) * argc);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("MEMSET_S failed %d.", retVal);
- goto ERROR_INIT;
- }
-
- for (i = 0; i < argc; i++)
- {
- if (!strcmp ("-m", argv[i]) && !mem_size_parsed && (i + 1 < argc))
- {
- gArgv[j] = argv[i];
- g_dpdk_argv[j] = argv[i];
- i++;
- j++;
- gArgv[j] = (char *) malloc (32);
- g_dpdk_argv[j] = (char *) malloc (32);
- /* gArgv[j] is NULL and g_dpdk_argv[j] isnot NULL, need free g_dpdk_argv[j] */
- arg_mem_index = j;
- if ((!gArgv[j]) || (!g_dpdk_argv[j]))
- {
- NSPOL_LOGERR ("malloc failed.");
- goto ERROR_PARSE_MALLOC;
- }
- mem_size = atoi (argv[i]);
- /* add memory range check,avoid handle wrongly later begin */
- if (mem_size < 0)
- {
- goto ERROR_PARSE_MALLOC;
- }
-
- j++;
- mem_size_parsed = 1;
- }
- else
- if (!strncmp (OPT_EAL_MEM_SIZE, argv[i], strlen (OPT_EAL_MEM_SIZE)))
- {
- tmp = strdup (argv[i]);
- if (tmp == NULL)
- {
- goto ERROR_PARSE_MALLOC;
- }
- /* Always use re-entrant functions in multi-threaded environments */
- tmp2 = strtok_r (tmp, "=", &saveptr1);
- tmp2 = strtok_r (NULL, "=", &saveptr1);
- if (tmp2)
- {
- eal_mem_size = atoi (tmp2);
- /* add memory range check,avoid handle wrongly later */
- if (eal_mem_size < 0)
- {
- free (tmp);
- goto ERROR_PARSE_MALLOC;
- }
- }
- free (tmp);
- tmp = NULL;
- /*remove this option since dpdk can't recognize it and may cause error. */
- /*so we should deduct the count by 1. */
- globalArgc -= 1;
- g_dpdk_argc -= 1;
- }
- else
- {
- gArgv[j] = argv[i];
- g_dpdk_argv[j] = argv[i];
- j++;
- }
- }
-
- /* -m arg is set */
- if (arg_mem_index >= 0)
- {
- retVal =
- SPRINTF_S (gArgv[arg_mem_index], 32, "%d", mem_size - eal_mem_size);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("SPRINTF_S failed]ret=%d", retVal);
- goto ERROR_PARSE_MALLOC;
- }
- retVal = SPRINTF_S (g_dpdk_argv[arg_mem_index], 32, "%d", eal_mem_size);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("SPRINTF_S failed]ret=%d", retVal);
- goto ERROR_PARSE_MALLOC;
- }
- }
- else
- {
- // do nothing for no mem arg and leave it for default process of pal and eal.
- }
-
- return 0;
-ERROR_PARSE_MALLOC:
- if (arg_mem_index >= 0 && gArgv[arg_mem_index])
- {
- free (gArgv[arg_mem_index]);
- gArgv[arg_mem_index] = NULL;
- }
-
- if (arg_mem_index >= 0 && g_dpdk_argv[arg_mem_index])
- {
- free (g_dpdk_argv[arg_mem_index]);
- g_dpdk_argv[arg_mem_index] = NULL;
- }
-
-ERROR_INIT:
- if (gArgv)
- {
- free (gArgv);
- gArgv = NULL;
- globalArgc = 0;
- }
-
- if (g_dpdk_argv)
- {
- free (g_dpdk_argv);
- g_dpdk_argv = NULL;
- g_dpdk_argc = 0;
- }
-
- return -1;
-}
-
-REGIST_MSG_MODULE_FUN (MSG_MODULE_IP, _process_ip_module_msg);
-
-REGIST_MSG_MODULE_MAJOR_FUN (MSG_MODULE_SPL, SPL_TCPIP_MSG_CALLBACK,
- _do_spl_callback_msg);
-
-REGIST_MSG_MODULE_MAJOR_FUN (MSG_MODULE_TIMER, SPL_TCPIP_MSG_TIMER,
- _do_spl_timer_msg);
-
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_TIMER, SPL_TCPIP_MSG_TIMER,
- TIMER_MSG_TIMEOUT, _do_timeout_handle);
-
-REGIST_MSG_MODULE_MAJOR_MINOR_FUN (MSG_MODULE_TIMER, SPL_TCPIP_MSG_TIMER,
- TIMER_MSG_CLEAR, _do_clear_timer);
diff --git a/stacks/lwip_stack/lwip_src/common/rb_tree.c b/stacks/lwip_stack/lwip_src/common/rb_tree.c
deleted file mode 100644
index 3dcb37a..0000000
--- a/stacks/lwip_stack/lwip_src/common/rb_tree.c
+++ /dev/null
@@ -1,393 +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 "rb_tree.h"
-
-static void
-__rb_rotate_right (struct rb_node *node, struct rb_root *root)
-{
- struct rb_node *left = node->rb_left;
- struct rb_node *parent = rb_parent (node);
-
- if ((node->rb_left = left->rb_right))
- {
- rb_set_parent (left->rb_right, node);
- }
-
- left->rb_right = node;
-
- rb_set_parent (left, parent);
-
- if (parent)
- {
- if (node == parent->rb_right)
- {
- parent->rb_right = left;
- }
- else
- {
- parent->rb_left = left;
- }
- }
- else
- {
- root->rb_node = left;
- }
-
- rb_set_parent (node, left);
-}
-
-static void
-__rb_rotate_left (struct rb_node *node, struct rb_root *root)
-{
- struct rb_node *parent = rb_parent (node);
-
- struct rb_node *right = node->rb_right;
-
- if ((node->rb_right = right->rb_left))
- {
- rb_set_parent (right->rb_left, node);
- }
-
- right->rb_left = node;
- rb_set_parent (right, parent);
-
- if (parent) /* judge parent node */
- {
- if (node == parent->rb_left)
- {
- parent->rb_left = right;
- }
- else
- {
- parent->rb_right = right;
- }
- }
- else
- {
- root->rb_node = right;
- }
-
- rb_set_parent (node, right);
-}
-
-static void
-__rb_erase_color (struct rb_node *rb_tree_node,
- struct rb_node *rb_tree_parent,
- struct rb_root *rb_tree_root)
-{
- struct rb_node *rb_tree_other;
-
- while ((!rb_tree_node || rb_is_black (rb_tree_node))
- && (rb_tree_node != rb_tree_root->rb_node))
- {
- if (rb_tree_parent == NULL)
- {
- break;
- }
-
- if (rb_tree_parent->rb_left == rb_tree_node)
- {
- rb_tree_other = rb_tree_parent->rb_right;
- if (rb_is_red (rb_tree_other))
- {
- rb_set_black (rb_tree_other);
- rb_set_red (rb_tree_parent);
- __rb_rotate_left (rb_tree_parent, rb_tree_root);
- rb_tree_other = rb_tree_parent->rb_right;
- }
-
- if ((!rb_tree_other->rb_left
- || rb_is_black (rb_tree_other->rb_left))
- && (!rb_tree_other->rb_right
- || rb_is_black (rb_tree_other->rb_right)))
- {
- rb_set_red (rb_tree_other);
- rb_tree_node = rb_tree_parent;
- rb_tree_parent = rb_parent (rb_tree_node);
- }
- else
- {
- if (!rb_tree_other->rb_right
- || rb_is_black (rb_tree_other->rb_right))
- {
- rb_set_black (rb_tree_other->rb_left);
- rb_set_red (rb_tree_other);
- __rb_rotate_right (rb_tree_other, rb_tree_root);
- rb_tree_other = rb_tree_parent->rb_right;
- }
-
- rb_set_color (rb_tree_other, rb_color (rb_tree_parent));
- rb_set_black (rb_tree_parent);
- rb_set_black (rb_tree_other->rb_right);
- __rb_rotate_left (rb_tree_parent, rb_tree_root);
- rb_tree_node = rb_tree_root->rb_node;
- break;
- }
- }
- else
- {
- rb_tree_other = rb_tree_parent->rb_left;
- if (rb_is_red (rb_tree_other))
- {
- rb_set_black (rb_tree_other);
- rb_set_red (rb_tree_parent);
- __rb_rotate_right (rb_tree_parent, rb_tree_root);
- rb_tree_other = rb_tree_parent->rb_left;
- }
-
- if ((!rb_tree_other->rb_left
- || rb_is_black (rb_tree_other->rb_left))
- && (!rb_tree_other->rb_right
- || rb_is_black (rb_tree_other->rb_right)))
- {
- rb_set_red (rb_tree_other);
- rb_tree_node = rb_tree_parent;
- rb_tree_parent = rb_parent (rb_tree_node);
- }
- else
- {
- if (!rb_tree_other->rb_left
- || rb_is_black (rb_tree_other->rb_left))
- {
- rb_set_black (rb_tree_other->rb_right);
- rb_set_red (rb_tree_other);
- __rb_rotate_left (rb_tree_other, rb_tree_root);
- rb_tree_other = rb_tree_parent->rb_left;
- }
-
- rb_set_color (rb_tree_other, rb_color (rb_tree_parent));
- rb_set_black (rb_tree_parent);
- rb_set_black (rb_tree_other->rb_left);
- __rb_rotate_right (rb_tree_parent, rb_tree_root);
- rb_tree_node = rb_tree_root->rb_node;
- break;
- }
- }
- }
-
- if (rb_tree_node)
- {
- rb_set_black (rb_tree_node);
- }
-}
-
-void
-rb_insert_color (struct rb_node *rb_tree_node, struct rb_root *rb_tree_root)
-{
- struct rb_node *rb_tree_parent, *rb_tree_gparent;
-
- if (!rb_tree_node || !rb_tree_root)
- return;
-
- while ((rb_tree_parent = rb_parent (rb_tree_node))
- && rb_is_red (rb_tree_parent))
- {
- rb_tree_gparent = rb_parent (rb_tree_parent);
-
- if (rb_tree_parent == rb_tree_gparent->rb_left)
- {
- {
- register struct rb_node *rb_tree_uncle =
- rb_tree_gparent->rb_right;
- if (rb_tree_uncle && rb_is_red (rb_tree_uncle))
- {
- rb_set_black (rb_tree_uncle);
- rb_set_black (rb_tree_parent);
- rb_set_red (rb_tree_gparent);
- rb_tree_node = rb_tree_gparent;
- continue;
- }
- }
-
- if (rb_tree_parent->rb_right == rb_tree_node)
- {
- register struct rb_node *rb_tree_tmp;
- __rb_rotate_left (rb_tree_parent, rb_tree_root);
- rb_tree_tmp = rb_tree_parent;
- rb_tree_parent = rb_tree_node;
- rb_tree_node = rb_tree_tmp;
- }
-
- rb_set_black (rb_tree_parent);
- rb_set_red (rb_tree_gparent);
- __rb_rotate_right (rb_tree_gparent, rb_tree_root);
- }
- else
- {
- {
- register struct rb_node *rb_tree_uncle = rb_tree_gparent->rb_left;
- if (rb_tree_uncle && rb_is_red (rb_tree_uncle))
- {
- rb_set_black (rb_tree_uncle);
- rb_set_black (rb_tree_parent);
- rb_set_red (rb_tree_gparent);
- rb_tree_node = rb_tree_gparent;
- continue;
- }
- }
-
- if (rb_tree_parent->rb_left == rb_tree_node)
- {
- register struct rb_node *rb_tree_tmp;
- __rb_rotate_right (rb_tree_parent, rb_tree_root);
- rb_tree_tmp = rb_tree_parent;
- rb_tree_parent = rb_tree_node;
- rb_tree_node = rb_tree_tmp;
- }
-
- rb_set_black (rb_tree_parent);
- rb_set_red (rb_tree_gparent);
- __rb_rotate_left (rb_tree_gparent, rb_tree_root);
- }
- }
-
- rb_set_black (rb_tree_root->rb_node);
-}
-
-void
-rb_erase (struct rb_node *node, struct rb_root *root)
-{
- struct rb_node *child, *parent;
- int color;
-
- if (!node || !root)
- return;
-
- if (!node->rb_left)
- {
- child = node->rb_right;
- }
- else if (!node->rb_right)
- {
- child = node->rb_left;
- }
- else
- {
- struct rb_node *old = node, *left;
-
- node = node->rb_right;
- while ((left = node->rb_left) != NULL)
- {
- node = left;
- }
-
- if (rb_parent (old))
- {
- if (rb_parent (old)->rb_left == old)
- {
- rb_parent (old)->rb_left = node;
- }
- else
- {
- rb_parent (old)->rb_right = node;
- }
- }
- else
- {
- root->rb_node = node;
- }
-
- child = node->rb_right;
- parent = rb_parent (node);
- color = rb_color (node);
-
- if (parent == old)
- {
- parent = node;
- }
- else
- {
- if (child)
- {
- rb_set_parent (child, parent);
- }
-
- parent->rb_left = child;
-
- node->rb_right = old->rb_right;
- rb_set_parent (old->rb_right, node);
- }
-
- node->rb_parent_color = old->rb_parent_color;
- node->rb_left = old->rb_left;
- rb_set_parent (old->rb_left, node);
-
- goto color;
- }
-
- parent = rb_parent (node);
- color = rb_color (node);
-
- if (child)
- {
- rb_set_parent (child, parent);
- }
-
- if (parent)
- {
- if (parent->rb_left == node)
- {
- parent->rb_left = child;
- }
- else
- {
- parent->rb_right = child;
- }
- }
- else
- {
- root->rb_node = child;
- }
-
-color:
- if (color == RB_BLACK)
- {
- __rb_erase_color (child, parent, root);
- }
-}
-
-struct rb_node *
-rb_next (const struct rb_node *node)
-{
- struct rb_node *parent;
-
- if (!node)
- return NULL;
-
- if (rb_parent (node) == node)
- {
- return NULL;
- }
-
- if (node->rb_right)
- {
- node = node->rb_right;
- while (node->rb_left)
- {
- node = node->rb_left;
- }
-
- return (struct rb_node *) node;
- }
-
- while ((parent = rb_parent (node)) && (node == parent->rb_right))
- {
- node = parent;
- }
-
- return parent;
-}
diff --git a/stacks/lwip_stack/lwip_src/common/rb_tree.h b/stacks/lwip_stack/lwip_src/common/rb_tree.h
deleted file mode 100644
index 87174fa..0000000
--- a/stacks/lwip_stack/lwip_src/common/rb_tree.h
+++ /dev/null
@@ -1,112 +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.
-*/
-
-#ifndef _UNX_RBTREE_H
-#define _UNX_RBTREE_H
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-#include <stdint.h>
-#include "types.h"
-#include "common_pal_bitwide_adjust.h"
-
-#define rb_parent(a) ((struct rb_node *)((a)->rb_parent_color & ~3))
-#define rb_color(a) ((a)->rb_parent_color & 1)
-
-struct rb_node
-{
- union
- {
- unsigned long rb_parent_color;
- u64 rb_parent_color_a;
- };
-
-#define RB_RED 0
-#define RB_BLACK 1
- union
- {
- struct rb_node *rb_right;
- u64 rb_right_a;
- };
-
- union
- {
- struct rb_node *rb_left;
- u64 rb_left_a;
- };
-};
-
-#define rb_set_red(c) do { (c)->rb_parent_color &= ~1; } while (0)
-#define rb_set_black(c) do { (c)->rb_parent_color |= 1; } while (0)
-
-/* The alignment might seem pointless, but allegedly CRIS needs it */
-
-struct rb_root
-{
- union
- {
- struct rb_node *rb_node;
- u64 rb_node_a;
- };
-};
-
-#define rb_is_red(e) (!rb_color(e))
-#define rb_is_black(e) rb_color(e)
-
-static inline void
-rb_set_color (struct rb_node *rb1, int color2)
-{
- rb1->rb_parent_color = (rb1->rb_parent_color & ~1) | color2;
-}
-
-static inline void
-rb_set_parent (struct rb_node *rb1, struct rb_node *pa)
-{
- rb1->rb_parent_color = (rb1->rb_parent_color & 3) | (unsigned long) pa;
-}
-
-#define RB_ROOT (struct rb_root) { NULL, }
-
-extern void rb_erase (struct rb_node *, struct rb_root *);
-
-extern void rb_insert_color (struct rb_node *, struct rb_root *);
-
-extern struct rb_node *rb_next (const struct rb_node *);
-
-#define rb_entry(ptr, type, member) container_of(ptr, type, member)
-
-#define RB_EMPTY_ROOT(root1) ((root1)->rb_node == NULL)
-#define RB_CLEAR_NODE(node2) (rb_set_parent(node2, node2))
-#define RB_EMPTY_NODE(node1) (rb_parent(node1) == node1)
-
-static inline void
-rb_link_node (struct rb_node *node1, struct rb_node *parent1,
- struct rb_node **rb_link1)
-{
- node1->rb_left = node1->rb_right = NULL;
- node1->rb_parent_color = (unsigned long) parent1;
- *rb_link1 = node1;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-#endif /* _UNX_RBTREE_H */
diff --git a/stacks/lwip_stack/lwip_src/common/spl_def.h b/stacks/lwip_stack/lwip_src/common/spl_def.h
deleted file mode 100644
index b62d179..0000000
--- a/stacks/lwip_stack/lwip_src/common/spl_def.h
+++ /dev/null
@@ -1,142 +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.
-*/
-
-#ifndef __STACKX_DEF_H__
-#define __STACKX_DEF_H__
-
-/* arch.h might define NULL already */
-//#include "lwip/arch.h"
-#include "spl_opt.h"
-#include "stackx_types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define STACKX_MAX(x, y) (((x) > (y)) ? (x) : (y))
-#define STACKX_MIN(x, y) (((x) < (y)) ? (x) : (y))
-
-/* Endianess-optimized shifting of two u8_t to create one u16_t */
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define STACKX_MAKE_U16(a, b) ((a << 8) | b)
-#else
-#define STACKX_MAKE_U16(a, b) ((b << 8) | a)
-#endif
-
-#ifndef STACKX_PLATFORM_BYTESWAP
-#define STACKX_PLATFORM_BYTESWAP 0
-#endif
-
-#ifndef STACKX_PREFIX_BYTEORDER_FUNCS
-
-/* workaround for naming collisions on some platforms */
-
-#ifdef spl_htons
-#undef spl_htons
-#endif /* htons */
-#ifdef spl_htonl
-#undef spl_htonl
-#endif /* spl_htonl */
-#ifdef spl_ntohs
-#undef spl_ntohs
-#endif /* spl_ntohs */
-#ifdef spl_ntohl
-#undef spl_ntohl
-#endif /* spl_ntohl */
-
-#define spl_htons(x) stackx_htons(x)
-#define spl_ntohs(x) stackx_ntohs(x)
-#define spl_htonl(x) stackx_htonl(x)
-#define spl_ntohl(x) stackx_ntohl(x)
-#endif /* STACKX_PREFIX_BYTEORDER_FUNCS */
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define stackx_htons(x) (x)
-#define stackx_ntohs(x) (x)
-#define stackx_htonl(x) (x)
-#define stackx_ntohl(x) (x)
-#define SPL_PP_HTONS(x) (x)
-#define SPL_PP_NTOHS(x) (x)
-#define SPL_PP_HTONL(x) (x)
-#define SPL_PP_NTOHL(x) (x)
-#else /* BYTE_ORDER != BIG_ENDIAN */
-#if STACKX_PLATFORM_BYTESWAP
-#define stackx_htons(x) STACKX_PLATFORM_HTONS(x)
-#define stackx_ntohs(x) STACKX_PLATFORM_HTONS(x)
-#define stackx_htonl(x) STACKX_PLATFORM_HTONL(x)
-#define stackx_ntohl(x) STACKX_PLATFORM_HTONL(x)
-#else /* STACKX_PLATFORM_BYTESWAP */
- /**
- * Convert an u16_t from host- to network byte order.
- *
- * @param n u16_t in host byte order
- * @return n in network byte order
- */
-static inline u16_t
-stackx_htons (u16_t x)
-{
- return ((x & 0xff) << 8) | ((x & 0xff00) >> 8);
-}
-
-static inline u16_t
-stackx_ntohs (u16_t x)
-{
- return stackx_htons (x);
-}
-
- /**
- * Convert an u32_t from host- to network byte order.
- *
- * @param n u32_t in host byte order
- * @return n in network byte order
- */
-static inline u32_t
-stackx_htonl (u32_t x)
-{
- return ((x & 0xff) << 24) |
- ((x & 0xff00) << 8) |
- ((x & 0xff0000UL) >> 8) | ((x & 0xff000000UL) >> 24);
-}
-
-static inline u32_t
-stackx_ntohl (u32_t x)
-{
- return stackx_htonl (x);
-}
-#endif /* STACKX_PLATFORM_BYTESWAP */
-
-/* These macros should be calculated by the preprocessor and are used
- with compile-time constants only (so that there is no little-endian
- overhead at runtime). */
-#define SPL_PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
-#define SPL_PP_NTOHS(x) SPL_PP_HTONS(x)
-#define SPL_PP_HTONL(x) ((((x) & 0xff) << 24) | \
- (((x) & 0xff00) << 8) | \
- (((x) & 0xff0000UL) >> 8) | \
- (((x) & 0xff000000UL) >> 24))
-#define SPL_PP_NTOHL(x) SPL_PP_HTONL(x)
-
-#endif /* BYTE_ORDER == BIG_ENDIAN */
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_DEF_H__ */
diff --git a/stacks/lwip_stack/lwip_src/common/spl_opt.h b/stacks/lwip_stack/lwip_src/common/spl_opt.h
deleted file mode 100644
index 98e6466..0000000
--- a/stacks/lwip_stack/lwip_src/common/spl_opt.h
+++ /dev/null
@@ -1,329 +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.
-*/
-
-#ifndef __STACKX_OPT_H__
-#define __STACKX_OPT_H__
-
-#include "stackxopts.h"
-#include "stackx_debug.h"
-#include "compiling_check.h"
-
-#define PBUF_VLAN_HLEN 0
-
-//#define SIZEOF_ETH_HDR (14)
-
-#ifndef STACKX_NETIF_API
-#define STACKX_NETIF_API 1
-#endif
-
-/*
- ------------------------------------
- ---------- Thread options ----------
- ------------------------------------
- */
-
-#define PTIMER_THREAD_NAME "ptimer_thread"
-
-/**
- * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.
- */
-#ifndef TCPIP_THREAD_NAME
-#define TCPIP_THREAD_NAME "spl_tcpip_thread"
-#endif
-
-#ifndef TCPIP_THREAD_STACKSIZE
-#define TCPIP_THREAD_STACKSIZE 0
-#endif
-
-#ifndef INT_MAX
-#define INT_MAX 2147483647
-#endif
-
-#ifndef INT_64_MAX
-#define INT_64_MAX 9223372036854775807
-#endif
-
-#ifndef RECV_BUFSIZE_DEFAULT
-#define RECV_BUFSIZE_DEFAULT INT_MAX
-#endif
-
-/*
- ----------------------------------------
- ---------- Statistics options ----------
- ----------------------------------------
- */
-
-/*
- ---------------------------------------
- ---------- Debugging options ----------
- ---------------------------------------
- */
-
-#ifndef STACKX_DBG_TYPES_ON
-#define STACKX_DBG_TYPES_ON STACKX_DBG_ON //ON
-#endif
-
-#ifndef INTERRUPT_DEBUG
-#define INTERRUPT_DEBUG STACKX_DBG_ON //ON
-#endif
-
-#ifndef TESTSOCKET_DEBUG
-#define TESTSOCKET_DEBUG STACKX_DBG_ON //ON
-#endif
-
-#ifndef ETHARP_DEBUG
-#define ETHARP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef NETIF_DEBUG
-#define NETIF_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef PBUF_DEBUG
-#define PBUF_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef API_LIB_DEBUG
-#define API_LIB_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef API_MSG_DEBUG
-#define API_MSG_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef SOCKETS_DEBUG
-#define SOCKETS_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef NS_EPOLL_DBG
-#define NS_EPOLL_DBG STACKX_DBG_ON
-#endif
-
-#ifndef ICMP_DEBUG
-#define ICMP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef IGMP_DEBUG
-#define IGMP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef INET_DEBUG
-#define INET_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef IP_DEBUG
-#define IP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef IP_REASS_DEBUG
-#define IP_REASS_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef RAW_DEBUG
-#define RAW_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef MEMP_DEBUG
-#define MEMP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef SYS_DEBUG
-#define SYS_DEBUG STACKX_DBG_OFF
-#endif
-
-#ifndef TIMERS_DEBUG
-#define TIMERS_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_DEBUG
-#define TCP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_TEST_DEBUG
-#define TCP_TEST_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_INPUT_DEBUG
-#define TCP_INPUT_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_RTO_DEBUG
-#define TCP_RTO_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_FR_DEBUG
-#define TCP_FR_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_FLOW_CTL_DEBUG
-#define TCP_FLOW_CTL_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_CWND_DEBUG
-#define TCP_CWND_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_WND_DEBUG
-#define TCP_WND_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_OUTPUT_DEBUG
-#define TCP_OUTPUT_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCP_RST_DEBUG
-#define TCP_RST_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef UDP_DEBUG
-#define UDP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef TCPIP_DEBUG
-#define TCPIP_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef NEW_RING_DEBUG
-#define NEW_RING_DEBUG STACKX_DBG_ON
-#endif
-
-#ifndef PACKET_DISPATCH
-#define PACKET_DISPATCH 1
-#endif
-
-#ifndef NETSTAT_SWITCH
-#define NETSTAT_SWITCH 1
-#endif
-
-#ifndef DISTRIBUTOR_DEBUG
-
-#define DISTRIBUTOR_DEBUG STACKX_DBG_ON
-#endif
-#define PBUF_REF_DEBUG STACKX_DBG_ON
-
-#ifndef CONTEXT_TIMER_DEBUG
-#define CONTEXT_TIMER_DEBUG STACKX_DBG_OFF
-#endif
-
-#if (DISTRIBUTOR_DEBUG == STACKX_DBG_ON)
-#define PD_DISTRIBUTOR_DEBUG
-
-#define DISTRIBUTOR_SINGLE
-#ifdef DISTRIBUTOR_SINGLE
-
-#ifndef __STACKX_DEBUG_H__
-#define STACKX_DBG_OFF 0x80U
-#define STACKX_DBG_ON 0x00U
-#endif
-
-#ifndef ETHARP_DEBUG
-#define ETHARP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef NETIF_DEBUG
-#define NETIF_DEBUG STACKX_DBG_ON
-#endif
-#ifndef PBUF_DEBUG
-#define PBUF_DEBUG STACKX_DBG_ON
-#endif
-#ifndef API_LIB_DEBUG
-#define API_LIB_DEBUG STACKX_DBG_ON
-#endif
-#ifndef API_MSG_DEBUG
-#define API_MSG_DEBUG STACKX_DBG_ON
-#endif
-#ifndef ICMP_DEBUG
-#define ICMP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef IGMP_DEBUG
-#define IGMP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef INET_DEBUG
-#define INET_DEBUG STACKX_DBG_ON
-#endif
-#ifndef IP_DEBUG
-#define IP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef IP_REASS_DEBUG
-#define IP_REASS_DEBUG STACKX_DBG_ON
-#endif
-#ifndef RAW_DEBUG
-#define RAW_DEBUG STACKX_DBG_ON
-#endif
-#ifndef MEMP_DEBUG
-#define MEMP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef SYS_DEBUG
-#define SYS_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TIMERS_DEBUG
-#define TIMERS_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_DEBUG
-#define TCP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_TEST_DEBUG
-#define TCP_TEST_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_INPUT_DEBUG
-#define TCP_INPUT_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_FR_DEBUG
-#define TCP_FR_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_RTO_DEBUG
-#define TCP_RTO_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_CWND_DEBUG
-#define TCP_CWND_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_WND_DEBUG
-#define TCP_WND_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_OUTPUT_DEBUG
-#define TCP_OUTPUT_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCP_RST_DEBUG
-#define TCP_RST_DEBUG STACKX_DBG_ON
-#endif
-#ifndef UDP_DEBUG
-#define UDP_DEBUG STACKX_DBG_ON
-#endif
-#ifndef TCPIP_DEBUG
-#define TCPIP_DEBUG STACKX_DBG_ON
-#endif
-
-#define SC_DPDK_INFO STACKX_DBG_ON
-#define SOCK_INFO STACKX_DBG_ON
-#ifndef STACKX_DBG_OFF
-#define STACKX_DBG_OFF 0x00U
-#endif
-
-#ifndef NS_EPOLL_DBG
-#define NS_EPOLL_DBG STACKX_DBG_ON
-#endif
-
-#ifndef DFX_DBG
-#define DFX_DBG STACKX_DBG_ON
-#endif
-
-#endif
-#endif /* DISTRIBUTOR_DEBUG */
-
-#ifndef STACKX_FLOW_CTL
-#define STACKX_FLOW_CTL 0
-#endif
-
-#endif /* __STACKX_OPT_H__ */
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]);
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_app_res.h b/stacks/lwip_stack/lwip_src/common/stackx_app_res.h
deleted file mode 100644
index 435f2f6..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_app_res.h
+++ /dev/null
@@ -1,103 +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.
-*/
-
-#ifndef STACKX_APP_RES_H
-#define STACKX_APP_RES_H
-#include "types.h"
-#include "nsfw_mem_api.h"
-#include "stackxopts.h"
-#include "stackx_spl_share.h"
-#include "nsfw_mt_config.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define SPL_RES_GROUP_ARRAY "spl_res_group_array"
-
-#define SPL_APP_RES "spl_app_res"
-#define SPL_APP_RES_GROUP_NAME "spl_app_res_group"
-#define SPL_TX_POOL_NAME "spl_tx_pool"
-#define SPL_CONN_POOL_NAME "spl_conn_pool"
-#define SPL_CONN_ARRAY_NAME "spl_conn_array"
-#define SPL_DFX_ARRAY_NAME "spl_dfx_array"
-#define SPL_MSG_POOL_NAME "spl_msg_pool"
-#define SPL_RECYCLE_GROUP "spl_recycle_group"
-#define SPL_RECV_RING_POOL_NAME "spl_recv_ring_pool"
-#define SPL_RECV_RING_ARRAY_NAME "spl_recv_array"
-
-#define SBR_TX_POOL_NUM APP_POOL_NUM
-#define SBR_TX_POOL_MBUF_NUM TX_MBUF_POOL_SIZE
-#define SBR_TX_MSG_NUM (SBR_TX_POOL_NUM * SBR_TX_POOL_MBUF_NUM)
-
-#define SBR_TX_POOL_ARRAY_NAME "sbr_tx_pool_array"
-#define SBR_TX_POOL_NAME "sbr_tx_pool"
-#define SBR_TX_MSG_ARRAY_NAME "sbr_tx_msg_array"
-
-#define SPL_MAX_MSG_NUM (MBOX_RING_SIZE*8*MAX_THREAD_NUM)
-
-typedef struct
-{
- PRIMARY_ADDR mring_handle msg_pool;
- PRIMARY_ADDR mring_handle conn_pool;
- PRIMARY_ADDR spl_netconn_t **conn_array;
- PRIMARY_ADDR mring_handle recv_ring_pool;
- PRIMARY_ADDR mpool_handle tx_pool_array[SBR_TX_POOL_NUM];
- PRIMARY_ADDR mring_handle mbox_array[SPL_MSG_BOX_NUM];
- i64 extend_member_bit;
-} spl_app_res_group;
-
-typedef struct
-{
- u32 pid_array[SBR_TX_POOL_NUM];
- PRIMARY_ADDR spl_app_res_group *res_group[MAX_THREAD_NUM];
- u16 thread_num;
-} spl_app_res_group_array;
-
-extern spl_app_res_group *g_spl_app_res_group;
-extern spl_app_res_group_array *g_res_group_array;
-
-/* call it main thread */
-int spl_init_group_array ();
-
-/* call these in tcpip thread */
-int spl_init_app_res ();
-spl_netconn_t **spl_get_conn_array (u32 pid);
-mring_handle spl_get_conn_pool ();
-mring_handle spl_get_msg_pool ();
-void spl_recycle_msg_pool (u32 pid);
-u32 spl_get_conn_num ();
-void spl_free_tx_pool (u32 pid);
-int spl_add_mbox (mring_handle mbox_array[], u32 array_size);
-int spl_add_instance_res_group (u32 thread_index, spl_app_res_group * group);
-
-/* call these in app */
-int sbr_malloc_tx_pool (u32 pid, mpool_handle pool[], u32 pool_num);
-int sbr_attach_group_array ();
-mring_handle sbr_get_instance_conn_pool (u32 thread_index);
-
-/* call these in app and spl */
-mring_handle *ss_get_instance_msg_box (u16 thread_index, u16 index);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_common.c b/stacks/lwip_stack/lwip_src/common/stackx_common.c
deleted file mode 100644
index 750df74..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_common.c
+++ /dev/null
@@ -1,357 +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 <stdarg.h>
-#include <stddef.h>
-#include "stackx_common.h"
-#include "nstack_securec.h"
-#include "nstack_log.h"
-#include "types.h"
-#include "stackx_types.h"
-
-int
-spl_snprintf (char *buffer, int buflen, const char *format, ...)
-{
- int len;
- va_list ap;
-
- if ((NULL == buffer) || (0 >= buflen))
- {
- return -1;
- }
-
- if (format == NULL)
- {
- buffer[0] = '\0';
- return -1;
- }
-
- (void) va_start (ap, format);
- len = VSNPRINTF_S (buffer, buflen, buflen - 1, format, ap);
- if (-1 == len)
- {
- va_end (ap);
- return -1;
- }
-
- va_end (ap);
- if ((len >= buflen) && (buflen > 0) && (buffer != NULL))
- {
- buffer[buflen - 1] = '\0';
- }
-
- return len;
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_mzone
-* Description : create mzone
-* Input : const char* name
-* size_t size
-* Output : None
-* Return Value : mzone_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mzone_handle
-sbr_create_mzone (const char *name, size_t size)
-{
- if (!name)
- {
- NSFW_LOGERR ("name is NULL");
- return NULL;
- }
-
- mzone_handle zone;
- nsfw_mem_zone param;
-
- param.isocket_id = -1;
- param.length = size;
- param.stname.entype = NSFW_SHMEM;
-
- if (STRCPY_S (param.stname.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSFW_LOGERR ("STRCPY_S failed]name=%s", name);
- return NULL;
- }
-
- zone = nsfw_mem_zone_create (&param);
- if (!zone)
- {
- NSFW_LOGERR ("nsfw_mem_zone_create failed]name=%s, size:%zu", name,
- size);
- return NULL;
- }
-
- return zone;
-}
-
-/*****************************************************************************
-* Prototype : sbr_lookup_mzone
-* Description : lookup mzone
-* Input : const char* name
-* Output : None
-* Return Value : mzone_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mzone_handle
-sbr_lookup_mzone (const char *name)
-{
- if (!name)
- {
- NSFW_LOGERR ("name is NULL");
- return NULL;
- }
-
- mzone_handle zone;
- nsfw_mem_name param;
-
- param.entype = NSFW_SHMEM;
- param.enowner = NSFW_PROC_MAIN;
- if (STRCPY_S (param.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSFW_LOGERR ("STRCPY_S failed]name=%s", name);
- return NULL;
- }
-
- zone = nsfw_mem_zone_lookup (&param);
- if (!zone)
- {
- NSFW_LOGERR ("nsfw_mem_zone_lookup failed]name=%s", name);
- return NULL;
- }
-
- return zone;
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_pool
-* Description : create pool
-* Input : const char* name
-* i32 num
-* u16 size
-* Output : None
-* Return Value : mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mring_handle
-sbr_create_pool (const char *name, i32 num, u16 size)
-{
- if (!name)
- {
- NSFW_LOGERR ("name is NULL");
- return NULL;
- }
-
- nsfw_mem_sppool param;
- if (EOK != MEMSET_S (&param, sizeof (param), 0, sizeof (param)))
- {
- NSFW_LOGERR ("memset error]name=%s", name);
- return NULL;
- }
-
- param.enmptype = NSFW_MRING_MPMC;
- param.useltsize = size;
- param.usnum = num;
- param.stname.entype = NSFW_SHMEM;
- param.isocket_id = -1;
- if (STRCPY_S (param.stname.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSFW_LOGERR ("STRCPY_S failed]name=%s", name);
- return NULL;
- }
-
- mring_handle ring = nsfw_mem_sp_create (&param);
- if (!ring)
- {
- NSFW_LOGERR ("Create pool failed]name=%s, num=%d, size=%u", name, num,
- size);
- }
-
- return ring;
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_ring
-* Description : create ring
-* Input : const char* name
-* i32 num
-* Output : None
-* Return Value : mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mring_handle
-sbr_create_ring (const char *name, i32 num)
-{
- if (!name)
- {
- NSFW_LOGERR ("name is NULL");
- return NULL;
- }
-
- nsfw_mem_mring param;
- if (EOK != MEMSET_S (&param, sizeof (param), 0, sizeof (param)))
- {
- NSFW_LOGERR ("memset error]name=%s", name);
- return NULL;
- }
-
- param.enmptype = NSFW_MRING_MPMC;
- param.isocket_id = -1;
- param.usnum = num;
- param.stname.entype = NSFW_SHMEM;
-
- if (STRCPY_S (param.stname.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSFW_LOGERR ("STRCPY_S failed]name=%s", name);
- return NULL;
- }
-
- mring_handle ring = nsfw_mem_ring_create (&param);
- if (!ring)
- {
- NSFW_LOGERR ("Create ring failed]name=%s, num=%d", name, num);
- }
-
- return ring;
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_multi_ring
-* Description : create multi ring
-* Input : const char* name
-* u32 ring_size
-* i32 ring_num
-* mring_handle* array
-* nsfw_mpool_type type
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_create_multi_ring (const char *name, u32 ring_size, i32 ring_num,
- mring_handle * array, nsfw_mpool_type type)
-{
- if (!name)
- {
- NSFW_LOGERR ("name is NULL");
- return -1;
- }
-
- if (!array)
- {
- NSFW_LOGERR ("array is NULL");
- return -1;
- }
-
- nsfw_mem_mring param;
-
- if (EOK != MEMSET_S (&param, sizeof (param), 0, sizeof (param)))
- {
- NSSBR_LOGERR ("Error to memset]name=%s", name);
- return -1;
- }
-
- param.enmptype = type;
- param.stname.entype = NSFW_SHMEM;
- if (STRCPY_S (param.stname.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSSBR_LOGERR ("STRCPY_S failed]name=%s", name);
- return -1;
- }
-
- param.usnum = ring_size;
- param.isocket_id = -1;
- if (nsfw_mem_sp_ring_create (&param, array, ring_num) != 0)
- {
- NSSBR_LOGERR ("Create ring pool failed]name=%s, ring_num=%d", name,
- ring_num);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_lookup_ring
-* Description : lookup ring
-* Input : const char* name
-* Output : None
-* Return Value : mring_handle
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-mring_handle
-sbr_lookup_ring (const char *name)
-{
- nsfw_mem_name param;
-
- param.entype = NSFW_SHMEM;
- param.enowner = NSFW_PROC_MAIN;
- if (STRCPY_S (param.aname, NSFW_MEM_NAME_LENTH, name) != 0)
- {
- NSFW_LOGERR ("STRCPY_S failed]name=%s", name);
- return NULL;
- }
-
- mring_handle ring = nsfw_mem_ring_lookup (&param);
- if (!ring)
- {
- NSFW_LOGERR ("lookup ring failed]name=%s", name);
- }
-
- return ring;
-}
-
-int
-sbr_timeval2msec (struct timeval *pTime, u64 * msec)
-{
- if ((pTime->tv_sec < 0) || (pTime->tv_usec < 0))
- {
- NSFW_LOGERR ("time->tv_sec is nagative");
- return -1;
- }
-
- if (STACKX_MAX_U64_NUM / 1000 < (u64_t) pTime->tv_sec)
- {
- NSFW_LOGERR ("tout.tv_sec is too large]tout.tv_sec=%lu", pTime->tv_sec);
- return -1;
- }
-
- u64 sec2msec = 1000 * pTime->tv_sec;
- u64 usec2msec = pTime->tv_usec / 1000;
-
- if (STACKX_MAX_U64_NUM - sec2msec < usec2msec)
- {
- NSFW_LOGERR
- ("nsec2msec plus sec2usec is too large]usec2msec=%lu,usec2msec=%lu",
- usec2msec, sec2msec);
- return -1;
- }
-
- *msec = sec2msec + usec2msec;
- return 0;
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_common.h b/stacks/lwip_stack/lwip_src/common/stackx_common.h
deleted file mode 100644
index 1df97d5..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_common.h
+++ /dev/null
@@ -1,44 +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.
-*/
-
-#ifndef STACKX_COMMON_H
-#define STACKX_COMMON_H
-#include "nsfw_mem_api.h"
-//#include "lwip/cc.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-int spl_snprintf (char *buffer, int buflen, const char *format, ...);
-mzone_handle sbr_create_mzone (const char *name, size_t size);
-mzone_handle sbr_lookup_mzone (const char *name);
-mring_handle sbr_create_pool (const char *name, i32 num, u16 size);
-mring_handle sbr_create_ring (const char *name, i32 num);
-int sbr_create_multi_ring (const char *name, u32 ring_size, i32 ring_num,
- mring_handle * array, nsfw_mpool_type type);
-mring_handle sbr_lookup_ring (const char *name);
-int sbr_timeval2msec (struct timeval *pTime, u64 * msec);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_common_opt.h b/stacks/lwip_stack/lwip_src/common/stackx_common_opt.h
deleted file mode 100644
index feccc3f..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_common_opt.h
+++ /dev/null
@@ -1,147 +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.
-*/
-
-#ifndef STACKX_COMMON_OPT_H
-#define STACKX_COMMON_OPT_H
-#include <sys/ioctl.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK 0X800 /* nonblocking I/O */
-#endif
-
-#if !defined (FIONREAD) || !defined (FIONBIO)
-#define IOC_VOID 0x20000000UL /* no parameters */
-#define IOC_OUT 0x40000000UL /* copy out parameters */
-#define IOC_IN 0x80000000UL /* copy in parameters */
-#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */
-#define IOC_INOUT (IOC_IN | IOC_OUT) /* 0x20000000 distinguishes new & old ioctl's */
-#define _IO(x, y) (((x) << 8) | (y) | IOC_VOID)
-#define _IOR(x, y, t) (IOC_OUT | (((long)sizeof(t) & IOCPARM_MASK) << 16) | ((x) << 8) | (y))
-#define _IOW(x, y, t) (IOC_IN | (((long)sizeof(t) & IOCPARM_MASK) << 16) | ((x) << 8) | (y))
-#endif
-
-#ifndef FIONREAD
-#define FIONREAD _IOR('f', 127, unsigned long)
-#endif
-
-#ifndef FIONBIO
-#define FIONBIO _IOW('f', 126, unsigned long)
-#endif
-
-#ifndef F_GETFL
-#define F_GETFL 3
-#endif
-
-#ifndef F_SETFL
-#define F_SETFL 4
-#endif
-
-#ifndef SPL_SHUT_RD
-#define SPL_SHUT_RD 0
-#define SPL_SHUT_WR 1
-#define SPL_SHUT_RDWR 2
-#endif
-
-/* Flags for struct netconn.flags (u8_t) */
-
-/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
- this temporarily stores whether to wake up the original application task
- if data couldn't be sent in the first try. */
-#define SPL_NETCONN_FLAG_WRITE_DELAYED 0x01
-
-/** Should this netconn avoid blocking? */
-#define SPL_NETCONN_FLAG_NON_BLOCKING 0x02
-
-/** Was the last connect action a non-blocking one? */
-#define SPL_NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04
-
-/** If this is set, a TCP netconn must call netconn_recved() to update
- the TCP receive window (done automatically if not set). */
-#define SPL_NETCONN_FLAG_NO_AUTO_RECVED 0x08
-
-/** If a nonblocking write has been rejected before, poll_tcp needs to
- check if the netconn is writable again */
-#define SPL_NETCONN_FLAG_CHECK_WRITESPACE 0x10
-
-/* For the netconn API, these values are use as a bitmask! */
-#define SPL_NETCONN_SHUT_RD 1
-#define SPL_NETCONN_SHUT_WR 2
-#define SPL_NETCONN_SHUT_RDWR (SPL_NETCONN_SHUT_RD | SPL_NETCONN_SHUT_WR)
-#define STACKX_TIMER_THREAD_SUPPORT 1
-
-/* Flags for netconn_write (u8_t) */
-#define SPL_NETCONN_NOFLAG 0x00
-#define SPL_NETCONN_NOCOPY 0x00
-#define SPL_NETCONN_COPY 0x01
-#define SPL_NETCONN_MORE 0x02
-#define SPL_NETCONN_DONTBLOCK 0x04
-
-#define SPL_TCP_NODELAY 0x01
-#define SPL_TCP_KEEPALIVE 0x02
-#define SPL_TCP_KEEPIDLE 0x04
-#define SPL_TCP_KEEPINTVL 0x05
-#define SPL_TCP_KEEPCNT 0x06
-#define SPL_TCP_LINGER2 0x08
-#define SPL_TCP_DEFER_ACCEPT 0x09
-#define SPL_TCP_INFO 0x0B
-
-typedef enum spl_netconn_type
-{
- SPL_NETCONN_INVALID = 0,
- SPL_NETCONN_TCP = 0x10,
- SPL_NETCONN_UDP = 0x20,
- SPL_NETCONN_UDPLITE = 0x21,
- SPL_NETCONN_UDPNOCHKSUM = 0x22,
- SPL_NETCONN_RAW = 0x40,
-} spl_netconn_type_t;
-
-typedef enum spl_netconn_state
-{
- SPL_NETCONN_NONE,
- SPL_NETCONN_WRITE,
- SPL_NETCONN_LISTEN,
- SPL_NETCONN_CONNECT,
- SPL_NETCONN_CLOSE,
-} spl_netconn_state_t;
-
-typedef enum spl_tcp_state
-{
- SPL_CLOSED = 0,
- SPL_LISTEN = 1,
- SPL_SYN_SENT = 2,
- SPL_SYN_RCVD = 3,
- SPL_ESTABLISHED = 4,
- SPL_FIN_WAIT_1 = 5,
- SPL_FIN_WAIT_2 = 6,
- SPL_CLOSE_WAIT = 7,
- SPL_CLOSING = 8,
- SPL_LAST_ACK = 9,
- SPL_TIME_WAIT = 10
-} spl_tcp_state_t;
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_debug.h b/stacks/lwip_stack/lwip_src/common/stackx_debug.h
deleted file mode 100644
index 7c6395e..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_debug.h
+++ /dev/null
@@ -1,70 +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.
-*/
-
-#ifndef __STACKX_DEBUG_H__
-#define __STACKX_DEBUG_H__
-
-//#include "lwip/arch.h"
-#include <pthread.h>
-
-#include <sys/syscall.h>
-
-#include "nstack_log.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/** lower two bits indicate dbug level
- * - 0 all
- * - 1 warning
- * - 2 serious
- * - 3 severe
- */
-#define STACKX_DBG_LEVEL_ALL 0x00
-#define STACKX_DBG_LEVEL_OFF STACKX_DBG_LEVEL_ALL /* compatibility define only */
-#define STACKX_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */
-#define STACKX_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */
-#define STACKX_DBG_LEVEL_SEVERE 0x03
-#define STACKX_DBG_MASK_LEVEL 0x00
-
-/** flag to enable that dbug message */
-#define STACKX_DBG_ON NS_LOG_STACKX_ON
-
-/** flag to disable that dbug message */
-#define STACKX_DBG_OFF NS_LOG_STACKX_OFF
-
-/** flag for indicating a tracing_message (to follow program flow) */
-#define STACKX_DBG_TRACE NS_LOG_STACKX_TRACE
-
-/** flag for indicating a state dbug message (to follow module states) */
-#define STACKX_DBG_STATE NS_LOG_STACKX_STATE
-
-/** flag for indicating newly added code, not thoroughly tested yet */
-#define STACKX_DBG_FRESH NS_LOG_STACKX_FRESH
-
-/** flag for to halt after printing this dbug message */
-#define STACKX_DBG_HALT NS_LOG_STACKX_HALT
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_DEBUG_H__ */
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_err.h b/stacks/lwip_stack/lwip_src/common/stackx_err.h
deleted file mode 100644
index 1d0fc20..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_err.h
+++ /dev/null
@@ -1,68 +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.
-*/
-
-#ifndef STACKX_ERR_H
-#define STACKX_ERR_H
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define ERR_OK 0 /* No error, everything OK. */
-#define ERR_MEM -1 /* Out of memory error. */
-#define ERR_BUF -2 /* Buffer error. */
-#define ERR_TIMEOUT -3 /* Timeout. */
-#define ERR_RTE -4 /* Routing problem. */
-#define ERR_INPROGRESS -5 /* Operation in progress */
-#define ERR_VAL -6 /* Illegal value. */
-#define ERR_WOULDBLOCK -7 /* Operation would block. */
-#define ERR_USE -8 /* Address in use. */
-#define ERR_ISCONN -9 /* Already connected. */
-
-#define SPL_ERR_IS_FATAL(e) ((e) < ERR_ISCONN)
-
-#define ERR_ABRT -10 /* Connection aborted. */
-#define ERR_RST -11 /* Connection reset. */
-#define ERR_CLSD -12 /* Connection closed. */
-#define ERR_CONN -13 /* Not connected. */
-
-#define ERR_ARG -14 /* Illegal argument. */
-
-#define ERR_IF -15 /* Low-level netif error */
-#define ERR_ALREADY -16 /* previous connect attemt has not yet completed */
-#define ERR_PROTOTYPE -17 /* prototype error or some other generic error.
- the operation is not allowed on current socket */
-
-#define ERR_CALLBACK -18 /* callback error */
-#define ERR_CANTASSIGNADDR -19 /* Cannot assign requested address */
-#define ERR_CONTAINER_ID -20 /*Illegal container id */
-#define ERR_NOTSOCK -21 /*not a socket */
-
-#define ERR_CLOSE_WAIT -22 /*closed in established state */
-
-#define ERR_EPROTONOSUPPORT -23 /* Protocol not supported */
-
-#define ERR_FAULTRECOVERY -24 /*SPL just recovered from a fatal fault */
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.c b/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.c
deleted file mode 100644
index 306bcaf..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.c
+++ /dev/null
@@ -1,280 +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 <stdint.h>
-#include <stddef.h>
-#include "stackx_ip_addr.h"
-#include "nstack_log.h"
-#include "spl_def.h"
-
-/* Here for now until needed in other places in stackx*/
-#ifndef isprint
-#define in_range(c, lo, up) ((u8)c >= lo && (u8)c <= up)
-#define isprint(c) in_range(c, 0x20, 0x7f)
-#define isdigit(c) in_range(c, '0', '9')
-#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F'))
-#define islower(c) in_range(c, 'a', 'z')
-#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v')
-#endif
-
-/**
- * Ascii internet address interpretation routine.
- * The value returned is in network order.
- *
- * @param cp IPaddress in ascii represenation (e.g. "127.0.0.1")
- * @return ipaddress in network order
- */
-u32
-spl_ipaddr_addr (const char *cp)
-{
- spl_ip_addr_t val;
-
- if (spl_ipaddr_aton (cp, &val))
- {
- return ip4_addr_get_u32 (&val);
- }
-
- return (SPL_IPADDR_NONE);
-}
-
-/**
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broad cast address.
- *
- * @param cp IPaddress in ascii represenation (e.g. "127.0.0.1")
- * @param addr pointer to which to save the ipaddress in network order
- * @return 1 if cp could be converted to addr, 0 on failure
- */
-int
-spl_ipaddr_aton (const char *cp, spl_ip_addr_t * addr)
-{
- u32 val;
- u8 base;
- char c;
- u32 parts[4];
- u32 *pp = parts;
-
- if (cp == NULL)
- {
- return 0;
- }
-
- c = *cp;
- for (;;)
- {
- /*
- * Get number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, 1-9=decimal.
- */
- if (!isdigit (c))
- {
- return (0);
- }
-
- val = 0;
- base = 10;
- if (c == '0')
- {
- c = *++cp;
- if ((c == 'x') || (c == 'X'))
- {
- base = 16;
- c = *++cp;
- }
- else
- {
- base = 8;
- }
- }
-
- for (;;)
- {
- if (isdigit (c))
- {
- val = (val * base) + (int) (c - '0');
- c = *++cp;
- }
- else if ((base == 16) && isxdigit (c))
- {
- val = (val << 4) | (int) (c + 10 - (islower (c) ? 'a' : 'A'));
- c = *++cp;
- }
- else
- {
- break;
- }
- }
-
- if (c == '.')
- {
- /*
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16 bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3)
- {
- return (0);
- }
-
- *pp++ = val;
- c = *++cp;
- }
- else
- {
- break;
- }
- }
-
- /*
- * Check for trailing characters.
- */
- if ((c != '\0') && !isspace (c))
- {
- return (0);
- }
-
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- switch (pp - parts + 1)
- {
- case 0:
- return (0); /* initial nondigit */
-
- case 1: /* a -- 32 bits */
- break;
-
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffffUL)
- {
- return (0);
- }
-
- val |= parts[0] << 24;
- break;
-
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffff)
- {
- return (0);
- }
-
- val |= (parts[0] << 24) | (parts[1] << 16);
- break;
-
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xff)
- {
- return (0);
- }
-
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- break;
- default:
- NSPOL_LOGERR ("unhandled");
-
- return (0);
- }
-
- if (addr)
- {
- ip4_addr_set_u32 (addr, spl_htonl (val));
- }
-
- return (1);
-}
-
-/**
- * Convert numeric IPaddress into decimal dotted ASCII representation.
- * returns ptr to static buffer; not reentrant!
- *
- * @param addr ipaddress in network order to convert
- * @return pointer to a global static (!) buffer that holds the ASCII
- * represenation of addr
- */
-char *
-spl_ipaddr_ntoa (const spl_ip_addr_t * addr)
-{
- static char str[16];
-
- return spl_ipaddr_ntoa_r (addr, str, 16);
-}
-
-/**
- * Same as spl_ipaddr_ntoa, but reentrant since a user-supplied buffer is used.
- *
- * @param addr ipaddress in network order to convert
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
-char *
-spl_ipaddr_ntoa_r (const spl_ip_addr_t * addr, char *buf, int buflen)
-{
- u32 s_addr;
- char inv[3];
- char *rp;
- u8 *ap;
- u8 rem;
- u8 n;
- u8 i;
- int len = 0;
-
- s_addr = ip4_addr_get_u32 (addr);
-
- rp = buf;
- ap = (u8 *) & s_addr;
- for (n = 0; n < 4; n++)
- {
- i = 0;
- do
- {
- rem = *ap % (u8) 10;
- *ap /= (u8) 10;
- inv[i++] = '0' + rem;
- }
- while (*ap);
-
- while (i--)
- {
- if (len++ >= buflen)
- {
- return NULL;
- }
-
- *rp++ = inv[i];
- }
-
- if (len++ >= buflen)
- {
- return NULL;
- }
-
- *rp++ = '.';
- ap++;
- }
-
- *--rp = 0;
- return buf;
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.h b/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.h
deleted file mode 100644
index 9f2dc07..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_ip_addr.h
+++ /dev/null
@@ -1,82 +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.
-*/
-
-#ifndef STACKX_IP_ADDR_H
-#define STACKX_IP_ADDR_H
-#include "types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/* This is the aligned version of ip_addr_t,
- used as local variable, on the stack, etc. */
-typedef struct spl_ip_addr
-{
- u32 addr;
-} spl_ip_addr_t;
-
-/** 127.0.0.1 */
-#define IPADDR_LOOPBACK ((u32_t)0x7f000001UL)
-
-/** 0.0.0.0 */
-#define IPADDR_ANY ((u32_t)0x00000000UL)
-
-/** 255.255.255.255 */
-#define IPADDR_BROADCAST ((u32_t)0xffffffffUL)
-
-/** 255.255.255.255 */
-#define SPL_IPADDR_NONE ((u32)0xffffffffUL)
-
-/** Set address to IPADDR_ANY (no need for spl_htonl()) */
-#define spl_ip_addr_set_any(ipaddr) ((ipaddr)->addr = IPADDR_ANY)
-
-/** Set complete address to zero */
-#define spl_ip_addr_set_zero(ipaddr) ((ipaddr)->addr = 0)
-
-/** IPv4 only: set the IPaddress given as an u32_t */
-#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32))
-
-/** IPv4 only: get the IPaddress as an u32_t */
-#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr)
-
-#define inet_addr_to_ipaddr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr))
-#define inet_addr_from_ipaddr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr))
-
-/** For backwards compatibility */
-#define spl_ip_ntoa(ipaddr) spl_ipaddr_ntoa(ipaddr)
-
-u32 spl_ipaddr_addr (const char *cp);
-int spl_ipaddr_aton (const char *cp, spl_ip_addr_t * addr);
-
-/** returns ptr to static buffer; not reentrant! */
-char *spl_ipaddr_ntoa (const spl_ip_addr_t * addr);
-char *spl_ipaddr_ntoa_r (const spl_ip_addr_t * addr, char *buf, int buflen);
-
-#define spl_inet_addr(cp) spl_ipaddr_addr(cp)
-#define spl_inet_aton(cp, paddr) spl_ipaddr_aton(cp, (spl_ip_addr_t*)(paddr))
-#define spl_inet_ntoa(paddr) spl_ipaddr_ntoa((spl_ip_addr_t*)&(paddr))
-#define spl_inet_ntoa_r(addr, buf, buflen) spl_ipaddr_ntoa_r((spl_ip_addr_t*)&(addr), buf, buflen)
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_ip_tos.h b/stacks/lwip_stack/lwip_src/common/stackx_ip_tos.h
deleted file mode 100644
index 6ca2598..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_ip_tos.h
+++ /dev/null
@@ -1,146 +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.
-*/
-
-#ifndef STACKX_IP_TOS_H
-#define STACKX_IP_TOS_H
-#include "types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/*
- * The Type of Service provides an indication of the abstract
- * parameters of the quality of service desired. These parameters are
- * to be used to guide the selection of the actual service parameters
- * when transmitting a datagram through a particular network. Several
- * networks offer service precedence, which somehow treats high
- * precedence traffic as more important than other traffic (generally
- * by accepting only traffic above a certain precedence at time of high
- * load). The major choice is a three way tradeoff between low-delay,
- * high-reliability, and high-throughput.
- * The use of the Delay, Throughput, and Reliability indications may
- * increase the cost (in some sense) of the service. In many networks
- * better performance for one of these parameters is coupled with worse
- * performance on another. Except for very unusual cases at most two
- * of these three indications should be set.
- */
-#define IPTOS_LOWCOST 0x02
-#define IPTOS_RELIABILITY 0x04
-#define IPTOS_THROUGHPUT 0x08
-#define IPTOS_LOWDELAY 0x10
-#define IPTOS_TOS_MASK 0x1E
-#define IPTOS_MINCOST IPTOS_LOWCOST
-#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
-
-/*
- * The Network Control precedence designation is intended to be used
- * within a network only. The actual use and control of that
- * designation is up to each network. The Internetwork Control
- * designation is intended for use by gateway control originators only.
- * If the actual use of these precedence designations is of concern to
- * a particular network, it is the responsibility of that network to
- * control the access to, and use of, those precedence designations.
- */
-#define IPTOS_PREC_ROUTINE 0x00
-#define IPTOS_PREC_PRIORITY 0x20
-#define IPTOS_PREC_IMMEDIATE 0x40
-#define IPTOS_PREC_FLASH 0x60
-#define IPTOS_PREC_FLASHOVERRIDE 0x80
-#define IPTOS_PREC_CRITIC_ECP 0xa0
-#define IPTOS_PREC_INTERNETCONTROL 0xc0
-#define IPTOS_PREC_MASK 0xe0
-#define IPTOS_PREC_NETCONTROL 0xe0
-#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
-
-#define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)
-
-#define TC_PRIO_BESTEFFORT 0
-#define TC_PRIO_FILLER 1
-#define TC_PRIO_BULK 2
-#define TC_PRIO_INTERACTIVE_BULK 4
-#define TC_PRIO_INTERACTIVE 6
-#define TC_PRIO_CONTROL 7
-#define TC_PRIO_MAX 15
-
-#define ECN_OR_COST(class ) TC_PRIO_ ## class
-
-static u8 stackx_ip_tos2prio[(IPTOS_TOS_MASK >> 1) + 1] = {
- TC_PRIO_BESTEFFORT,
- ECN_OR_COST (FILLER),
- TC_PRIO_BESTEFFORT,
- ECN_OR_COST (BESTEFFORT),
- TC_PRIO_BULK,
- ECN_OR_COST (BULK),
- TC_PRIO_BULK,
- ECN_OR_COST (BULK),
- TC_PRIO_INTERACTIVE,
- ECN_OR_COST (INTERACTIVE),
- TC_PRIO_INTERACTIVE,
- ECN_OR_COST (INTERACTIVE),
- TC_PRIO_INTERACTIVE_BULK,
- ECN_OR_COST (INTERACTIVE_BULK),
- TC_PRIO_INTERACTIVE_BULK,
- ECN_OR_COST (INTERACTIVE_BULK)
-};
-
-static inline char
-stackx_rt_tos2priority (u8 tos)
-{
- return stackx_ip_tos2prio[IPTOS_TOS (tos) >> 1];
-}
-
-typedef enum
-{
- STACKX_PRIM,
- STACKX_HIGH,
- STACKX_MEDIUM,
- STACKX_LOW
-} stackx_prio;
-
-static inline stackx_prio
-stackx_get_prio (u8 tos)
-{
- if (0 == tos)
- {
- return STACKX_PRIM;
- }
- char prio = stackx_rt_tos2priority (tos);
- if ((TC_PRIO_INTERACTIVE == prio))
- {
- return STACKX_HIGH;
- }
- else if ((TC_PRIO_BESTEFFORT == prio) || (TC_PRIO_INTERACTIVE_BULK == prio))
- {
- return STACKX_MEDIUM;
- }
- else if ((TC_PRIO_BULK == prio) || (TC_PRIO_FILLER == prio))
- {
- return STACKX_LOW;
- }
-
- return STACKX_PRIM;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_netbuf.h b/stacks/lwip_stack/lwip_src/common/stackx_netbuf.h
deleted file mode 100644
index a8be1a7..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_netbuf.h
+++ /dev/null
@@ -1,43 +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.
-*/
-
-#ifndef STACKX_NETBUF_H
-#define STACKX_NETBUF_H
-#include "stackx_pbuf.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef struct spl_netbuf
-{
- struct spl_pbuf *p;
- spl_ip_addr_t addr;
- u16 port;
-} spl_netbuf;
-
-#define netbuf_fromaddr(buf) (&((buf)->addr))
-#define netbuf_fromport(buf) ((buf)->port)
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_pbuf.c b/stacks/lwip_stack/lwip_src/common/stackx_pbuf.c
deleted file mode 100644
index c176a4b..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_pbuf.c
+++ /dev/null
@@ -1,223 +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_spl_share.h"
-#include "stackx_pbuf.h"
-#include "common_mem_mbuf.h"
-#include "nstack_securec.h"
-#include "nsfw_maintain_api.h"
-#include "stackx_tcp_opt.h"
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-
-/*****************************************************************************
-* Prototype : sbr_malloc_pbuf
-* Description : malloc spl_pbuf,use it in app
-* Input : mpool_handle mp
-* u16 len
-* u32 mbuf_data_size
-* u16 offset
-* Output : None
-* Return Value : struct pbuf*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-struct spl_pbuf *
-sbr_malloc_pbuf (mpool_handle mp, u16 len, u32 mbuf_data_size, u16 offset)
-{
- if ((len < offset) || (len > mbuf_data_size))
- {
- NSSBR_LOGERR ("len is invalid]len=%u", len);
- return NULL;
- }
-
- struct common_mem_mbuf *mbuf = NULL;
- struct spl_pbuf *buf = NULL;
-
- mbuf = nsfw_mem_mbf_alloc (mp, NSFW_SHMEM);
- if (unlikely (mbuf == NULL))
- {
- NS_LOG_CTRL (LOG_CTRL_HUGEPAGE_ALLOC_FAIL, LOGSBR, "NSSBR", NSLOG_WAR,
- "alloc mbuf failed");
- return NULL;
- }
-
- mbuf->data_len = len;
- mbuf->next = NULL;
- mbuf->nb_segs = 1;
- mbuf->pkt_len = len;
- buf = (struct spl_pbuf *) ((char *) mbuf + sizeof (struct common_mem_mbuf));
- res_alloc (&buf->res_chk);
- buf->next = 0;
- void *tmp = common_pktmbuf_mtod (mbuf, void *);
- buf->payload = (void *) (ADDR_LTOSH (tmp) + offset);
- buf->tot_len = len - offset;
- buf->len = len - offset;
- buf->type = SPL_PBUF_HUGE;
- buf->flags = 0;
- buf->freeNext = NULL;
- buf->conn_a = 0;
- buf->proto_type = SPL_PBUF_PROTO_NONE;
- NSSBR_LOGDBG ("malloc pbuf ok]buf=%p,PRIMARY_ADDR=%p", buf,
- ADDR_LTOSH (buf));
- return buf;
-}
-
-u32_t
-spl_pbuf_copy_partial (struct spl_pbuf * buf, void *dataptr, u32_t len,
- u32_t offset)
-{
- struct spl_pbuf *p = buf;
- u32_t buf_copy_len;
- u32_t copied_total = 0;
- char *databuf = (char *) dataptr;
-
- /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */
- for (p = buf; len != 0 && p != NULL;
- p = PTR_SHTOL (struct spl_pbuf *, p->next_a))
- {
- if (offset != 0 && offset >= p->len)
- {
- /* don't copy from this buffer -> on to the next */
- offset -= p->len;
- }
- else if (p->len - offset > len)
- {
- /* copy from this buffer. maybe only partially. */
- (void) common_memcpy (databuf, ADDR_SHTOL (p->payload_a + offset),
- len);
- copied_total += len;
- break;
- }
- else
- {
- buf_copy_len = p->len - offset;
- /* copy the necessary parts of the buffer */
- (void) common_memcpy (databuf, ADDR_SHTOL (p->payload_a + offset),
- buf_copy_len);
-
- copied_total += buf_copy_len;
- databuf += buf_copy_len;
- len -= buf_copy_len;
- offset = 0;
- }
- }
-
- return copied_total;
-}
-
-int
-spl_tx_force_buf_free (void *data)
-{
- struct common_mem_mbuf *mbuf = data;
- if (NULL == mbuf)
- {
- return FALSE;
- }
-
- struct spl_pbuf *p_buf =
- (struct spl_pbuf *) (((char *) mbuf) + sizeof (struct common_mem_mbuf));
- u8 tempflag = p_buf->res_chk.u8Reserve;
- if ((mbuf->refcnt == 0) || (tempflag & DPDK_SEND_FLAG))
- {
- return FALSE;
- }
-
- NSFW_LOGINF ("free mbuf]%p", data);
- (void) nsfw_mem_mbf_free ((mbuf_handle) mbuf, NSFW_SHMEM);
- return TRUE;
-}
-
-int
-spl_force_buf_free (void *data)
-{
- struct common_mem_mbuf *mbuf = data;
-
- if (NULL == mbuf || (mbuf->refcnt == 0))
- {
- return FALSE;
- }
-
- NSFW_LOGINF ("free mbuf]%p", data);
- (void) nsfw_mem_mbf_free ((mbuf_handle) mbuf, NSFW_SHMEM);
- return TRUE;
-}
-
-int
-spl_reg_res_tx_mgr (mpool_handle * pool)
-{
- struct common_mem_mempool *mp = (struct common_mem_mempool *) pool;
- if (NULL == mp)
- {
- return 0;
- }
-
- nsfw_res_scn_cfg scn_cfg = { NSFW_RES_SCAN_MBUF, 60, 3, 16,
- mp->size / 128, mp->size,
- mp->elt_size,
- sizeof (struct common_mem_mbuf) + offsetof (struct spl_pbuf, res_chk),
- mp,
- mp->pool_data,
- spl_tx_force_buf_free
- };
- (void) nsfw_res_mgr_reg (&scn_cfg);
- return 0;
-}
-
-int
-spl_reg_res_rxmt_mgr (mpool_handle * pool)
-{
- struct common_mem_mempool *mp = (struct common_mem_mempool *) pool;
- if (NULL == mp)
- {
- return 0;
- }
-
- nsfw_res_scn_cfg scn_cfg = { NSFW_RES_SCAN_MBUF, 60, 3, 16,
- mp->size / 128, mp->size,
- mp->elt_size,
- sizeof (struct common_mem_mbuf) + offsetof (struct spl_pbuf, res_chk),
- mp,
- mp->pool_data,
- spl_tx_force_buf_free
- }; /*Can use same function for time */
- (void) nsfw_res_mgr_reg (&scn_cfg);
- return 0;
-}
-
-int
-spl_reg_res_txrx_mgr (mpool_handle * pool)
-{
- struct common_mem_mempool *mp = (struct common_mem_mempool *) pool;
- if (NULL == mp)
- {
- return 0;
- }
-
- nsfw_res_scn_cfg scn_cfg = { NSFW_RES_SCAN_MBUF, 60, 3, 16,
- mp->size / 128, mp->size,
- mp->elt_size,
- sizeof (struct common_mem_mbuf) + offsetof (struct spl_pbuf, res_chk),
- mp,
- mp->pool_data,
- spl_force_buf_free
- };
- (void) nsfw_res_mgr_reg (&scn_cfg);
- return 0;
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_pbuf.h b/stacks/lwip_stack/lwip_src/common/stackx_pbuf.h
deleted file mode 100644
index 60f1772..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_pbuf.h
+++ /dev/null
@@ -1,82 +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.
-*/
-
-#ifndef STACKX_PBUF_H
-#define STACKX_PBUF_H
-
-#include "common_mem_base_type.h"
-#include "common_mem_mbuf.h"
-#include "nsfw_mem_api.h"
-#include "stackx_pbuf_comm.h"
-#ifdef HAL_LIB
-#else
-#include "common_pal_bitwide_adjust.h"
-#endif
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define NEED_ACK_FLAG 0x01 /* This spl_pbuf may have multiple references. */
-#define PBUF_FREE_FLAG 0x04 /* This spl_pbuf has been free. */
-#define DPDK_SEND_FLAG 0x10 /* This spl_pbuf has been sent to DPDK. */
-#define LOOP_SEND_FLAG 0x40 /* This spl_pbuf has been looped to IP layer and not received by app layer yet. */
-
-struct spl_pbuf *sbr_malloc_pbuf (mpool_handle mp, u16 len,
- u32 mbuf_data_size, u16 offset);
-void sbr_free_pbuf (struct spl_pbuf *p);
-u32 spl_pbuf_copy_partial (struct spl_pbuf *p, void *dataptr, u32_t len,
- u32_t offset);
-int spl_reg_res_txrx_mgr (mpool_handle * pool);
-int spl_reg_res_tx_mgr (mpool_handle * pool);
-
-/* release buf hold by app on abnormal exit */
-/*
- *For TX mbuf: recycle_flg can be: MBUF_UNUSED, MBUF_HLD_BY_APP, MBUF_HLD_BY_SPL.
- *For TX mbuf: recycle_flg can be: MBUF_UNSUED, app pid.
- */
-static inline void
-pbuf_set_recycle_flg (struct spl_pbuf *p, uint32_t flg)
-{
- uint32_t *recycle_flg;
- struct spl_pbuf *q = p;
- struct common_mem_mbuf *m;
-
- while (q != NULL)
- {
- m =
- (struct common_mem_mbuf *) ((char *) q -
- sizeof (struct common_mem_mbuf));
-#ifdef HAL_LIB
-#else
- recycle_flg =
- (uint32_t *) ((char *) (m->buf_addr) + RTE_PKTMBUF_HEADROOM -
- sizeof (uint32_t));
-#endif
- *recycle_flg = flg;
- q = (struct spl_pbuf *) ADDR_SHTOL (q->next_a);
- }
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_pbuf_comm.h b/stacks/lwip_stack/lwip_src/common/stackx_pbuf_comm.h
deleted file mode 100644
index 6a21312..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_pbuf_comm.h
+++ /dev/null
@@ -1,109 +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.
-*/
-
-#ifndef STACKX_PBUF_COMM_H
-#define STACKX_PBUF_COMM_H
-#include "types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define SPL_PBUF_TRANSPORT_HLEN 20
-#define SPL_PBUF_UDP_HLEN 8
-#define SPL_PBUF_IP_HLEN 20
-
-#define SPL_PBUF_VLAN_HLEN 0
-
-#ifndef SPL_PBUF_LINK_HLEN
-#define SPL_PBUF_LINK_HLEN (14 + SPL_PBUF_VLAN_HLEN)
-#endif
-
-typedef enum spl_pbuf_layer
-{
- SPL_PBUF_TRANSPORT,
- SPL_PBUF_UDP,
- SPL_PBUF_IP,
- SPL_PBUF_LINK,
- SPL_PBUF_RAW,
- SPL_PBUF_MAX_LAYER,
-} spl_pbuf_layer;
-
-typedef enum spl_pbuf_type
-{
- SPL_PBUF_RAM, /* pbuf data is stored in RAM */
- SPL_PBUF_ROM, /* pbuf data is stored in ROM */
- SPL_PBUF_REF, /* pbuf comes from the pbuf pool */
- SPL_PBUF_POOL, /* pbuf payload refers to RAM */
- SPL_PBUF_HUGE /* pbuf is stored in HugePage memory in struct common_mem_mbuf */
-} spl_pbuf_type;
-
-enum spl_pbuf_proto
-{
- SPL_PBUF_PROTO_NONE,
- SPL_PBUF_TCP_SEND,
- SPL_PBUF_TCP_RECV
-} spl_pbuf_proto;
-
-typedef struct spl_pbuf
-{
- /** next pbuf in singly linked pbuf chain */
- union
- {
- struct spl_pbuf *next;
- u64 next_a;
- };
-
- /** pointer to the actual data in the buffer */
- union
- {
- void *payload;
- u64 payload_a;
- };
-
- union
- {
- void *msg;
- u64 msg_a;
- };
-
- union
- {
- void *conn;
- u64 conn_a;
- };
-
- struct spl_pbuf *freeNext; // This pointer will point to next pbuf you want to free in stackx
-
- u32 tot_len;
- u32 len;
- int proto_type;
- u16 ref;
- u8 type;
- u8 flags;
- nsfw_res res_chk;
-
-} spl_pbuf;
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_spl_msg.h b/stacks/lwip_stack/lwip_src/common/stackx_spl_msg.h
deleted file mode 100644
index 3088150..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_spl_msg.h
+++ /dev/null
@@ -1,241 +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.
-*/
-
-#ifndef STACKX_SPL_MSG_H
-#define STACKX_SPL_MSG_H
-#include "nsfw_msg.h"
-#include "stackx_ip_addr.h"
-#include "stackx_spl_share.h"
-#include "stackx_common_opt.h"
-#include <sys/socket.h>
-#include <netinet/tcp.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-enum spl_tcpip_msg_type
-{
- SPL_TCPIP_NEW_MSG_API,
-#if STACKX_TIMER_THREAD_SUPPORT
- SPL_TCPIP_MSG_TIMER,
-#endif
-#if STACKX_NETIF_API
- SPL_TCPIP_MSG_NETIFAPI,
-#endif
- SPL_TCPIP_MSG_CALLBACK,
- SPL_TCPIP_MSG_IP_MODULE,
-
- SPL_TCPIP_MSG_MAX, //the number of enum
- SPL_TCPIP_MSG_BOTTOM = MAX_MAJOR_TYPE //the max number of enum
-};
-
-enum api_msg_type
-{
- SPL_API_DO_NEWCONN = 0,
- SPL_API_DO_DELCON,
- SPL_API_DO_RECV,
- SPL_API_DO_GETADDR,
- SPL_API_DO_BIND,
- SPL_API_DO_CONNECT,
- SPL_API_DO_LISTEN,
- SPL_API_DO_CLOSE,
- SPL_API_DO_SET_SOCK_OPT,
- SPL_API_DO_GET_SOCK_OPT,
- SPL_API_DO_SEND,
- SPL_API_DO_WRITE,
- SPL_API_DO_POST,
- SPL_API_DO_SHOW,
- SPL_API_DO_EXTREN_SOCK_SET,
- SPL_API_DO_ENABLE_TRACE,
- SPL_API_GET_PROTOCOL,
- SPL_API_DO_IOCTL_OPT,
- SPL_API_DO_GETSOCK_NAME,
- SPL_API_DO_DUMP_L4,
- SPL_API_DO_PBUF_FREE,
- SPL_API_DO_APP_TOUCH, /* app send its version info to nStackMain */
-
- SPL_API_MSG_MAX, //the number of enum
- SPL_API_MSG_BOTTOM = MAX_MINOR_TYPE //the max number of enum
-};
-
-/* TODO: move thes to apporpriate file */
-#define TCP_RTO_MAX ((unsigned)(120*1000)) /* 120s */
-#define TCP_RTO_MIN ((unsigned)(200)) /* 200ms */
-
-#define TCP_TIMEOUT_INIT ((unsigned)(1*1000)) /* RFC6298 2.1 initial RTO value */
-#define CONN_TCP_MEM_MIN_LINE ((TX_MBUF_POOL_SIZE)/1024) //conn level : min value of send_buf
-#define CONN_TCP_MEM_DEF_LINE ((TX_MBUF_POOL_SIZE)/128) //conn level : default value of send_buf
-#define CONN_TCP_MEM_MAX_LINE ((TX_MBUF_POOL_SIZE)/12)
-
-#define SOF_DEBUG 0x01U
-#define SOF_ACCEPTCONN 0x02U
-#define SOF_DONTROUTE 0x10U
-#define SOF_USELOOPBACK 0x40U
-#define SOF_LINGER 0x80U
-#define SOF_OOBINLINE 0x0100U
-#define SOF_REUSEPORT 0x0200U
-
-/* General structure for calling APIs*/
-typedef struct api_param_t
-{
- data_com_msg *m;
- i64 comm_private_data;
-} api_param;
-
-/* SPL_API_DO_SEND */
-typedef struct
-{
- PRIMARY_ADDR struct spl_pbuf *p;
- spl_ip_addr_t local_ip;
- spl_ip_addr_t addr;
- spl_ip_addr_t srcAddr;
- u16 port;
- u16 srcPort;
- u16 toport_chksum;
- u8 tos;
- u8 pad;
- u8 flags;
- i64 extend_member_bit;
-} msg_send_buf;
-
-/* SPL_API_DO_BIND */
-typedef struct
-{
- spl_ip_addr_t ipaddr;
- u16 port;
- i64 extend_member_bit;
-} msg_bind;
-
-/* SPL_API_DO_CLOSE */
-typedef struct
-{
- long time_started;
- u8 shut;
- i64 extend_member_bit;
-} msg_close;
-
-/* SPL_API_DO_CONNECT */
-typedef struct
-{
- spl_ip_addr_t local_ip;
- spl_ip_addr_t ipaddr;
- u16 port;
- i64 extend_member_bit;
-} msg_connect;
-
-/* SPL_API_DO_DELCON */
-typedef struct
-{
- PRIMARY_ADDR struct spl_netconn *conn;
- PRIMARY_ADDR struct spl_pbuf *buf;
- long time_started;
- pid_t pid;
- u8 shut;
- u8 msg_box_ref; /* use it for priority */
- u8 notify_omc; /* bool */
- i64 extend_member_bit;
-} msg_delete_netconn;
-
-/* SPL_API_DO_WRITE */
-typedef struct msg_write_buf_T
-{
- PRIMARY_ADDR struct spl_pbuf *p;
- struct msg_write_buf_T *next;
- size_t len;
- u8 apiflags;
- i64 extend_member_bit;
-} msg_write_buf;
-
-/* SPL_API_DO_LISTEN */
-typedef struct
-{
- mring_handle conn_pool;
- u8 backlog;
- i64 extend_member_bit;
-} msg_listen;
-
-/* SPL_API_DO_NEWCONN */
-typedef struct
-{
- PRIMARY_ADDR struct spl_netconn *conn;
- spl_netconn_type_t type;
- u8 proto;
- int socket;
- i64 extend_member_bit;
-} msg_new_netconn;
-
-/* SPL_API_DO_RECV */
-typedef struct
-{
- PRIMARY_ADDR struct spl_pbuf *p;
- u32 len;
- i64 extend_member_bit;
-} msg_recv_buf;
-
-/* SPL_API_DO_GETSOCK_NAME */
-typedef struct
-{
- struct sockaddr sock_addr;
- u8 cmd;
- i64 extend_member_bit;
-} msg_getaddrname;
-
-/* SPL_API_DO_GET_SOCK_OPT,SPL_API_DO_SET_SOCK_OPT */
-typedef struct
-{
- int level;
- int optname;
- PRIMARY_ADDR mring_handle msg_box; /* IP_TOS, spl will get new msg box for app */
- union
- {
- int int_optval;
- //struct in_addr inaddr_optval;
- //struct linger _linger;
- struct timeval timeval_optval;
- struct tcp_info tpinfo;
- //ipmreq ipmreq_optval; //Multicast support later
- } optval;
-
- u32 optlen;
- i64 extend_member_bit;
-} msg_setgetsockopt;
-
-/* SPL_API_DO_PBUF_FREE */
-typedef struct
-{
- PRIMARY_ADDR struct spl_pbuf *buf;
- i64 extend_member_bit;
-} msg_free_buf;
-
-/* app send its version info to nStackMain */
-#define NSTACK_VERSION_LEN 128
-/* SPL_API_DO_APP_TOUCH */
-typedef struct
-{
- u32_t hostpid;
- char app_version[NSTACK_VERSION_LEN];
-} msg_app_touch;
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_spl_share.c b/stacks/lwip_stack/lwip_src/common/stackx_spl_share.c
deleted file mode 100644
index 4fa91d8..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_spl_share.c
+++ /dev/null
@@ -1,198 +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_spl_msg.h"
-#include "stackx_spl_share.h"
-#include "nstack_log.h"
-#include "nsfw_msg_api.h"
-#include "nsfw_recycle_api.h"
-
-/*****************************************************************************
-* Prototype : ss_reset_conn_recycle
-* Description : reset conn recycle
-* Input : netconn_recycle* recycle
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_reset_conn_recycle (netconn_recycle * recycle)
-{
- recycle->accept_from = NULL;
- recycle->is_listen_conn = 0;
- (void) nsfw_pidinfo_init (&recycle->pid_info);
- recycle->fork_ref = 0;
- recycle->delay_msg = NULL;
- recycle->delay_flag = SS_DELAY_STOPPED;
-}
-
-/*****************************************************************************
-* Prototype : ss_reset_conn
-* Description : reset conn
-* Input : spl_netconn_t* conn
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-ss_reset_conn (spl_netconn_t * conn)
-{
- conn->recv_obj = 0;
- conn->private_data = 0;
- conn->msg_box = NULL;
- conn->snd_buf = 0;
- conn->epoll_flag = 0;
- conn->recv_avail_prod = 0;
- conn->recv_avail_cons = 0;
- conn->rcvevent = 0;
- conn->state = SPL_NETCONN_NONE;
- conn->sendevent = 0;
- conn->errevent = 0;
- conn->shut_status = 0xFFFF;
- conn->flags = 0;
- conn->last_err = 0;
- conn->CanNotReceive = 0;
- conn->bind_thread_index = 0;
- conn->tcp_sndbuf = 0;
- conn->tcp_wmem_alloc_cnt = 0;
- conn->tcp_wmem_sbr_free_cnt = 0;
- conn->tcp_wmem_spl_free_cnt = 0;
- conn->mss = 0;
- conn->remote_port = 0;
- conn->remote_ip.addr = 0;
- conn->local_ip.addr = 0;
- conn->local_port = 0;
- conn->type = SPL_NETCONN_INVALID;
- conn->tcp_state = SPL_CLOSED;
- ss_reset_conn_recycle (&conn->recycle);
- conn->extend_member_bit = 0;
- conn->epInfo = NULL;
-}
-
-/*****************************************************************************
-* Prototype : ss_init_conn
-* Description : init conn
-* Input : spl_netconn_t* conn
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_init_conn (spl_netconn_t * conn, mring_handle pool,
- spl_netconn_type_t type)
-{
- res_alloc (&conn->res_chk);
-
- conn->type = type;
- conn->recycle.fork_ref = 1;
- conn->recv_ring_valid = 1;
- sys_sem_init (&conn->close_completed);
- NSSBR_LOGINF ("malloc conn ok]conn=%p,pool=%p", conn, pool);
-}
-
-/*****************************************************************************
-* Prototype : ss_malloc_conn
-* Description : malloc conn, only used in spl
-* Input : mring_handle pool
-* netconn_type_t type
-* Output : None
-* Return Value : spl_netconn_t*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-spl_netconn_t *
-ss_malloc_conn (mring_handle pool, spl_netconn_type_t type)
-{
- spl_netconn_t *conn = NULL;
-
- if (nsfw_mem_ring_dequeue (pool, (void **) &conn) != 1)
- {
- NSSBR_LOGERR ("malloc conn failed");
- return NULL;
- }
-
- ss_init_conn (conn, pool, type);
- return conn;
-}
-
-/*****************************************************************************
-* Prototype : ss_malloc_conn_app
-* Description : malloc conn, only used in app
-* Input : mring_handle pool
-* netconn_type_t type
-* Output : None
-* Return Value : spl_netconn_t*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-spl_netconn_t *
-ss_malloc_conn_app (mring_handle pool, spl_netconn_type_t type)
-{
- spl_netconn_t *conn = NULL;
-
- if (nsfw_mem_ring_dequeue (pool, (void **) &conn) != 1)
- {
- NSSBR_LOGERR ("malloc conn failed");
- return NULL;
- }
-
- if (ss_add_pid (conn, get_sys_pid ()) < 0)
- {
- NSSBR_LOGERR ("ss_add_pid failed]conn=%p", conn);
- }
-
- ss_init_conn (conn, pool, type);
- return conn;
-}
-
-/*****************************************************************************
-* Prototype : ss_free_conn
-* Description : free conn
-* Input : spl_netconn_t* conn
-* mring_handle pool
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-ss_free_conn (spl_netconn_t * conn)
-{
- ss_reset_conn (conn);
-
- if (res_free (&conn->res_chk))
- {
- NSFW_LOGERR ("conn refree!]conn=%p", conn);
- return;
- }
-
- mring_handle pool = ss_get_conn_pool (conn);
- if (nsfw_mem_ring_enqueue (pool, (void *) conn) != 1)
- {
- NSSBR_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- }
-
- NSSBR_LOGINF ("free conn ok]conn=%p,pool=%p", conn, pool);
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_spl_share.h b/stacks/lwip_stack/lwip_src/common/stackx_spl_share.h
deleted file mode 100644
index 2d35dd0..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_spl_share.h
+++ /dev/null
@@ -1,490 +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.
-*/
-
-#ifndef STACKX_SPL_SHARE_H
-#define STACKX_SPL_SHARE_H
-#include "types.h"
-#include "common_mem_api.h"
-#include "nsfw_mem_api.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_ip_addr.h"
-#include <sys/types.h>
-#include "spl_opt.h"
-#include "stackx_ip_tos.h"
-#include "stackx_common_opt.h"
-#include "stackx_tx_box.h"
-#include "pidinfo.h"
-//#include "stackx_dfx_api.h"
-#include "compiling_check.h"
-#include "nsfw_msg.h"
-#include "stackx_spl_msg.h"
-#include "hal_api.h"
-#include "stackx_types.h"
-#include <errno.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define MSG_PRIO_QUEUE_NUM 3
-COMPAT_PROTECT (MSG_PRIO_QUEUE_NUM, 3);
-
-#define SPL_MSG_BOX_NUM (MSG_PRIO_QUEUE_NUM + 1)
-
-#define SBR_FD_NETCONN_SIZE (256 * 3)
-COMPAT_PROTECT (SBR_FD_NETCONN_SIZE, 256 * 3);
-
-#define SS_NETCONN_SIZE (256 * 2)
-#define SBR_FD_SIZE (SBR_FD_NETCONN_SIZE - SS_NETCONN_SIZE)
-
-typedef struct
-{
- PRIMARY_ADDR mring_handle msg_pool;
- PRIMARY_ADDR mring_handle conn_pool;
- PRIMARY_ADDR struct spl_netconn **conn_array;
- u32 conn_num;
- i64 extend_member_bit;
-} sbr_recycle_group;
-
-typedef enum
-{
- SS_DELAY_STARTED,
- SS_DELAY_STOPPING,
- SS_DELAY_STOPPED,
- SS_DELAY_AGAIN
-} ss_delay_flag;
-
-typedef enum
-{
- NORMAL_RECV_RING = 0,
- CUSTOM_RECV_RING = 1,
-} recv_ring_type;
-
-typedef struct
-{
- PRIMARY_ADDR sbr_recycle_group *group;
- PRIMARY_ADDR struct spl_netconn *accept_from; /* for recycle fd in listen */
- void *delay_msg;
- nsfw_pidinfo pid_info;
- volatile i16 fork_ref;
- i8 is_listen_conn;
- i8 delay_flag;
-} netconn_recycle;
-
-typedef struct spl_netconn
-{
- i64 recv_obj;
- i64 comm_pcb_data; /* only used by spl */
- i64 private_data; /* only used by spl */
- PRIMARY_ADDR mring_handle msg_box;
- PRIMARY_ADDR mring_handle recv_ring;
- volatile u32 snd_buf;
- volatile i32 epoll_flag;
- /*here using prod/cons to instead recv_avail, avoid atomic oper. */
- volatile u32_t recv_avail_prod; /*the product of recv_avail */
- volatile u32_t recv_avail_cons; /*the consume of recv_avail */
- volatile i32 rcvevent;
- spl_netconn_state_t state;
- u16 sendevent;
- u16 errevent;
- volatile u16 shut_status;
- u8 flags;
- i8 last_err;
- u8 CanNotReceive;
- u8 recv_ring_valid;
- u16 bind_thread_index;
- u16 mss;
- sys_sem_st close_completed;
- mring_handle conn_pool; /* where the conn in pcb is from */
-
- void *epInfo;
-
- /* The following shared field access rules: protocol stack process
- * is responsible for writing, socket api process read only
- */
- i32 send_bufsize;
- i32 tcp_sndbuf;
- u32 tcp_wmem_alloc_cnt;
- u32 tcp_wmem_sbr_free_cnt;
- volatile u32 tcp_wmem_spl_free_cnt;
- u16 remote_port;
- u16 local_port;
- spl_ip_addr_t remote_ip;
- spl_ip_addr_t local_ip;
- spl_netconn_type_t type;
- spl_tcp_state_t tcp_state;
-
- /* for recycle */
- netconn_recycle recycle;
- nsfw_res res_chk;
- i64 extend_member_bit;
-} spl_netconn_t; /* sizeof(spl_netconn_t) need < SS_NETCONN_SIZE */
-SIZE_OF_TYPE_PLUS8_NOT_LARGER_THAN (spl_netconn_t, SS_NETCONN_SIZE);
-
-typedef struct
-{
- /**
- * it will increase after every restart which used for
- * tell different runnings.
- */
- u32 running_ref_no;
-
- /* only increased when fault to restart */
- u32 fault_ref_no;
-
- /* the procedures before upgrade are finished successfully */
- u32 prepare_upgrade_done;
-
-} spl_init_info_t;
-
-typedef struct netifExt
-{
- struct netifExt *next;
- u16_t id;
- char if_name[HAL_MAX_NIC_NAME_LEN];
- hal_hdl_t hdl;
- u16_t num_packets_recv;
-} netifExt;
-
-static inline mring_handle
-ss_get_msg_pool (spl_netconn_t * sh)
-{
- sbr_recycle_group *group =
- (sbr_recycle_group *) ADDR_SHTOL (sh->recycle.group);
- return ADDR_SHTOL (group->msg_pool);
-}
-
-static inline mring_handle
-ss_get_conn_pool (spl_netconn_t * sh)
-{
- sbr_recycle_group *group =
- (sbr_recycle_group *) ADDR_SHTOL (sh->recycle.group);
- return ADDR_SHTOL (group->conn_pool);
-}
-
-static inline int
-ss_is_nonblock_flag (spl_netconn_t * sh)
-{
- return (sh->flags & SPL_NETCONN_FLAG_NON_BLOCKING) != 0;
-}
-
-static inline int
-ss_get_nonblock_flag (spl_netconn_t * sh)
-{
- return ss_is_nonblock_flag (sh) ? O_NONBLOCK : 0;
-}
-
-static inline void
-ss_set_nonblock_flag (spl_netconn_t * sh, u32 flag)
-{
- if (flag)
- {
- sh->flags |= SPL_NETCONN_FLAG_NON_BLOCKING;
- }
- else
- {
- sh->flags &= ~SPL_NETCONN_FLAG_NON_BLOCKING;
- }
-}
-
-static inline int
-ss_get_last_errno (spl_netconn_t * sh)
-{
- return sh->last_err;
-}
-
-static inline i32
-ss_get_recv_event (spl_netconn_t * sh)
-{
- return sh->rcvevent;
-}
-
-static inline int
-ss_can_not_recv (spl_netconn_t * sh)
-{
- return sh->CanNotReceive;
-}
-
-static inline int
-ss_is_shut_rd (spl_netconn_t * sh)
-{
- int status = sh->shut_status;
- return ((SPL_SHUT_RD == status) || (SPL_SHUT_RDWR == status));
-}
-
-static inline void
-ss_set_shut_status (spl_netconn_t * sh, u16 how)
-{
- sh->shut_status = how;
-}
-
-static inline u16
-ss_get_shut_status (spl_netconn_t * sh)
-{
- return sh->shut_status;
-}
-
-static inline void
-ss_sub_recv_event (spl_netconn_t * sh)
-{
- __sync_fetch_and_sub (&sh->rcvevent, 1);
-}
-
-static inline void
-ss_add_recv_event (spl_netconn_t * sh)
-{
- __sync_fetch_and_add (&sh->rcvevent, 1);
-}
-
-static inline i64
-ss_get_recv_obj (spl_netconn_t * sh)
-{
- return sh->recv_obj;
-}
-
-static inline i64
-ss_get_private_data (spl_netconn_t * sh)
-{
- return sh->private_data;
-}
-
-static inline i64
-ss_get_comm_private_data (spl_netconn_t * sh)
-{
- return sh->comm_pcb_data;
-}
-
-static inline int
-ss_recv_ring_valid (spl_netconn_t * sh)
-{
- return sh->recv_ring_valid;
-}
-
-static inline mring_handle
-ss_get_recv_ring (spl_netconn_t * sh)
-{
- return (mring_handle) ADDR_SHTOL (sh->recv_ring);
-}
-
-static inline void
-ss_set_send_event (spl_netconn_t * sh, u16 value)
-{
- sh->sendevent = value;
-}
-
-static inline int
-ss_is_noautorecved_flag (spl_netconn_t * sh)
-{
- return (sh->flags & SPL_NETCONN_FLAG_NO_AUTO_RECVED) != 0;
-}
-
-static inline int
-ss_get_noautorecved_flag (spl_netconn_t * sh)
-{
- return ss_is_noautorecved_flag (sh) ? SPL_NETCONN_FLAG_NO_AUTO_RECVED : 0;
-}
-
-static inline void
-ss_set_noautorecved_flag (spl_netconn_t * sh, u8 flag)
-{
- if (flag)
- {
- sh->flags |= SPL_NETCONN_FLAG_NO_AUTO_RECVED;
- }
- else
- {
- sh->flags &= ~SPL_NETCONN_FLAG_NO_AUTO_RECVED;
- }
-}
-
-static inline void
-ss_set_state (spl_netconn_t * sh, spl_netconn_state_t state)
-{
- sh->state = state;
-}
-
-static inline int
-ss_is_write_state (spl_netconn_t * sh)
-{
- return (SPL_NETCONN_WRITE == sh->state);
-}
-
-static inline int
-ss_is_listen_state (spl_netconn_t * sh)
-{
- return (SPL_NETCONN_LISTEN == sh->state);
-}
-
-static inline void
-ss_sub_recv_avail (spl_netconn_t * sh, int value)
-{
- sh->recv_avail_cons += value;
-}
-
-static inline i32
-ss_get_recv_avail (spl_netconn_t * sh)
-{
- return sh->recv_avail_prod - sh->recv_avail_cons;
-}
-
-static inline u16
-ss_get_mss (spl_netconn_t * sh)
-{
- return sh->mss;
-}
-
-static inline spl_ip_addr_t *
-ss_get_remote_ip (spl_netconn_t * sh)
-{
- return &(sh->remote_ip);
-}
-
-static inline u16
-ss_get_remote_port (spl_netconn_t * sh)
-{
- return sh->remote_port;
-}
-
-static inline spl_tcp_state_t
-ss_get_tcp_state (spl_netconn_t * sh)
-{
- return sh->tcp_state;
-}
-
-static inline u16
-ss_get_bind_thread_index (spl_netconn_t * sh)
-{
- return sh->bind_thread_index;
-}
-
-static inline void
-ss_set_bind_thread_index (spl_netconn_t * sh, u16 bind_thread_index)
-{
- sh->bind_thread_index = bind_thread_index;
-}
-
-static inline void
-ss_set_msg_box (spl_netconn_t * sh, mring_handle box)
-{
- sh->msg_box = (mring_handle) ADDR_LTOSH (box);
-}
-
-static inline mring_handle
-ss_get_msg_box (spl_netconn_t * sh)
-{
- return (mring_handle) ADDR_SHTOL (sh->msg_box);
-}
-
-static inline spl_ip_addr_t *
-ss_get_local_ip (spl_netconn_t * sh)
-{
- return &sh->local_ip;
-}
-
-static inline void
-ss_set_local_ip (spl_netconn_t * sh, u32 addr)
-{
- if (!sh)
- {
- return;
- }
- sh->local_ip.addr = addr;
-}
-
-static inline u16
-ss_get_local_port (spl_netconn_t * sh)
-{
- return sh->local_port;
-}
-
-static inline void
-ss_set_local_port (spl_netconn_t * sh, u16 local_port)
-{
- sh->local_port = local_port;
-}
-
-static inline void
-ss_set_accept_from (spl_netconn_t * sh, spl_netconn_t * accept_from)
-{
- sh->recycle.accept_from = accept_from;
-}
-
-static inline void
-ss_set_is_listen_conn (spl_netconn_t * sh, i8 is_listen_conn)
-{
- sh->recycle.is_listen_conn = is_listen_conn;
-}
-
-static inline i32
-ss_inc_fork_ref (spl_netconn_t * sh)
-{
- return __sync_add_and_fetch (&sh->recycle.fork_ref, 1);
-}
-
-static inline i32
-ss_dec_fork_ref (spl_netconn_t * sh)
-{
- return __sync_sub_and_fetch (&sh->recycle.fork_ref, 1);
-}
-
-static inline i32
-ss_get_fork_ref (spl_netconn_t * sh)
-{
- return sh->recycle.fork_ref;
-}
-
-static inline int
-ss_add_pid (spl_netconn_t * sh, pid_t pid)
-{
- return nsfw_add_pid (&sh->recycle.pid_info, pid);
-}
-
-static inline int
-ss_del_pid (spl_netconn_t * sh, pid_t pid)
-{
- return nsfw_del_pid (&sh->recycle.pid_info, pid);
-}
-
-static inline int
-ss_is_pid_exist (spl_netconn_t * sh, pid_t pid)
-{
- return nsfw_pid_exist (&sh->recycle.pid_info, pid);
-}
-
-static inline int
-ss_is_pid_array_empty (spl_netconn_t * sh)
-{
- return nsfw_pidinfo_empty (&sh->recycle.pid_info);
-}
-
-spl_netconn_t *ss_malloc_conn (mring_handle pool, spl_netconn_type_t type);
-spl_netconn_t *ss_malloc_conn_app (mring_handle pool,
- spl_netconn_type_t type);
-void ss_free_conn (spl_netconn_t * conn);
-void ss_reset_conn (spl_netconn_t * conn);
-
-typedef void (*ss_close_conn_fun) (void *close_data, u32 delay_sec);
-int ss_recycle_conn (void *close_data, ss_close_conn_fun close_conn);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_tcp_opt.h b/stacks/lwip_stack/lwip_src/common/stackx_tcp_opt.h
deleted file mode 100644
index cac3dcb..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_tcp_opt.h
+++ /dev/null
@@ -1,42 +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.
-*/
-
-#ifndef __STACKX_TCP_OPT_H__
-#define __STACKX_TCP_OPT_H__
-
-#include "spl_opt.h"
-
-/* TCP Options flags */
-#define TF_ACK_DELAY ((u32_t)0x01U) /* Delayed ACK. */
-#define TF_ACK_NOW ((u32_t)0x02U) /* Immediate ACK. */
-#define TF_WINDOWSCALING ((u32_t)0x40U) /* Window scaling option enabled */
-#define TF_INFR ((u32_t)0x04U) /* In fast recovery. */
-#define TF_TIMESTAMP ((u32_t)0x08U) /* Timestamp option enabled */
-#define TF_RXCLOSED ((u32_t)0x10U) /* rx closed by tcp_shutdown */
-#define TF_FIN ((u32_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */
-#define TF_NODELAY ((u32_t)0x100U) /* Disable Nagle algorithm */
-#define TF_NAGLEMEMERR ((u32_t)0x80U)
-
-/* TCP segment Options flags */
-#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option. */
-#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */
-#define TF_SEG_OPTS_WS (u8_t)0x08U /* Include window scaling option. */
-
-#define STACKX_TCP_OPT_LENGTH(flags) \
- (flags & TF_SEG_OPTS_MSS ? 4 : 0) + \
- (flags & TF_SEG_OPTS_TS ? 12 : 0) + \
- (flags & TF_SEG_OPTS_WS ? 4 : 0)
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_tx_box.c b/stacks/lwip_stack/lwip_src/common/stackx_tx_box.c
deleted file mode 100644
index 74673ad..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_tx_box.c
+++ /dev/null
@@ -1,64 +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 "stackxopts.h"
-#include "nstack_log.h"
-#include "stackx_tx_box.h"
-#include "nsfw_mt_config.h"
-
-#define MZ_STACKX_RING_NAME "VppTCP_Ring"
-#define MZ_STACKX_PRIORITY_RING_NAME "VppTCP_Priority%u_Ring"
-
-/*
- * Given the stackx ring name template above, get the queue name
- */
-const char *
-get_stackx_ring_name ()
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety) */
- static char rbuffer[sizeof (MZ_STACKX_RING_NAME) + 16];
-
- int retVal =
- spl_snprintf (rbuffer, sizeof (rbuffer) - 1, MZ_STACKX_RING_NAME);
-
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return rbuffer;
-}
-
-const char *
-get_stackx_priority_ring_name (unsigned priority)
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety) */
- static char prbuffer[sizeof (MZ_STACKX_PRIORITY_RING_NAME) + 32];
-
- int retVal = spl_snprintf (prbuffer, sizeof (prbuffer) - 1,
- MZ_STACKX_PRIORITY_RING_NAME, priority);
-
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return prbuffer;
-}
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_tx_box.h b/stacks/lwip_stack/lwip_src/common/stackx_tx_box.h
deleted file mode 100644
index edfba5c..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_tx_box.h
+++ /dev/null
@@ -1,39 +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.
-*/
-
-#ifndef STACKX_TX_BOX_H
-#define STACKX_TX_BOX_H
-#include "sys/types.h"
-#include "nsfw_mem_api.h"
-#include "stackx_common.h"
-#include "nsfw_mt_config.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-const char *get_stackx_ring_name ();
-const char *get_stackx_priority_ring_name (unsigned priority);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackx_types.h b/stacks/lwip_stack/lwip_src/common/stackx_types.h
deleted file mode 100644
index 6c78a20..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackx_types.h
+++ /dev/null
@@ -1,68 +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.
-*/
-
-#ifndef STACKX_TYPES_H
-#define STACKX_TYPES_H
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#if 1
-#ifndef STACKX_MAX_S16_NUM
-#define STACKX_MAX_S16_NUM ((s16_t)0x7fff)
-#endif
-
-#ifndef STACKX_MAX_U16_NUM
-#define STACKX_MAX_U16_NUM ((u16_t)0xFfff)
-#endif
-
-#ifndef STACKX_MAX_U32_NUM
-#define STACKX_MAX_U32_NUM ((u32_t)0xffffffff)
-#endif
-
-#ifndef STACKX_MAX_S32_NUM
-#define STACKX_MAX_S32_NUM ((s32_t)0x7fffffff)
-#endif
-
-#ifndef STACKX_MAX_U64_NUM
-#define STACKX_MAX_U64_NUM ((u64_t)0xffffffffffffffff)
-#endif
-
-#ifndef STACKX_MAX_S64_NUM
-#define STACKX_MAX_S64_NUM ((s64_t)0x7fffffffffffffff)
-#endif
-#endif
-
-#if 1
-typedef uint64_t u64_t;
-typedef int64_t s64_t;
-
-typedef uint32_t u32_t;
-typedef int32_t s32_t;
-
-typedef uint16_t u16_t;
-typedef int16_t s16_t;
-
-typedef uint8_t u8_t;
-typedef int8_t s8_t;
-
-typedef uintptr_t mem_ptr_t;
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/common/stackxopts.h b/stacks/lwip_stack/lwip_src/common/stackxopts.h
deleted file mode 100644
index 04ff67d..0000000
--- a/stacks/lwip_stack/lwip_src/common/stackxopts.h
+++ /dev/null
@@ -1,53 +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.
-*/
-
-#ifndef STACKX_OPTS_H
-#define STACKX_OPTS_H
-
-struct memory_statics
-{
- char name[120];
- long size;
-};
-
-extern u32 g_type;
-extern struct memory_statics memory_used_size[80];
-
-#define DPDK_MEMORY_COUNT(memory, len)\
-{\
- if (g_type < MAX_MEMORY_USED_SIZE)\
- {\
- const char * ptr_memory = memory;\
- if (ptr_memory && EOK != STRCPY_S(memory_used_size[g_type].name, sizeof(memory_used_size[g_type].name), ptr_memory))\
- {\
- NSPOL_LOGERR("STRCPY_S failed.");\
- }\
- memory_used_size[g_type].size =(long) len;\
- g_type++;\
- }\
-}
-
-#define SPL_MAX_UDP_MSG_LEN (0xFFFF -28)
-#define RECV_MAX_POOL 4
-#define MAX_TRY_GET_MEMORY_TIMES 4
-#define MAX_MEMORY_USED_SIZE 80
-#define SPL_IP_HLEN 20
-#define SPL_TCP_HLEN 20
-#define SPL_TCP_MAX_OPTION_LEN 40
-#define SPL_FRAME_MTU 1500
-#define SPL_TCP_SEND_MAX_SEG_PER_MSG 25
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/core/global_tick.c b/stacks/lwip_stack/lwip_src/core/global_tick.c
deleted file mode 100644
index ee180c9..0000000
--- a/stacks/lwip_stack/lwip_src/core/global_tick.c
+++ /dev/null
@@ -1,48 +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 "nsfw_mem_api.h"
-#include "nstack_share_res.h"
-#include "nstack_securec.h"
-
-extern nstack_tick_info_t g_nstack_timer_tick;
-
-int
-init_stackx_global_tick (void)
-{
- nsfw_mem_zone mzone;
-
- if (STRCPY_S
- (mzone.stname.aname, NSFW_MEM_NAME_LENGTH, NSTACK_GLOBAL_TICK_SHM) != 0)
- {
- NSPOL_LOGERR ("STRCPY_S fail");
- return -1;
- }
-
- mzone.stname.entype = NSFW_SHMEM;
- mzone.isocket_id = -1;
- mzone.length = sizeof (uint64_t);
- mzone.ireserv = 0;
-
- g_nstack_timer_tick.tick_ptr = (uint64_t *) nsfw_mem_zone_create (&mzone);
- if (NULL == g_nstack_timer_tick.tick_ptr)
- {
- NSPOL_LOGERR ("Failed to create global timer tick memory");
- return -1;
- }
-
- return 0;
-}
diff --git a/stacks/lwip_stack/lwip_src/core/spl_pbuf.c b/stacks/lwip_stack/lwip_src/core/spl_pbuf.c
deleted file mode 100644
index e4aa014..0000000
--- a/stacks/lwip_stack/lwip_src/core/spl_pbuf.c
+++ /dev/null
@@ -1,611 +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 "spl_opt.h"
-
-#include "spl_def.h"
-#include "spl_pbuf.h"
-#include "stackx_pbuf.h"
-
-#include "stackx_spl_share.h"
-#include "spl_api.h"
-
-#include "nsfw_maintain_api.h"
-#include "netif/sc_dpdk.h"
-#include <common_mem_mbuf.h>
-
-#include <string.h>
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "spl_instance.h"
-
-#include "sys.h"
-#include "mem.h"
-#include "memp.h"
-//#include "sockets.h"
-//#include <netinet/in.h>
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct spl_pbuf))
-u16_t g_offSetArry[SPL_PBUF_MAX_LAYER];
-
-u16_t g_offSetArry[SPL_PBUF_MAX_LAYER] =
- { PBUF_TRANSPORT_HLEN + PBUF_IP_HLEN + SPL_PBUF_LINK_HLEN,
- SPL_PBUF_UDP_HLEN + PBUF_IP_HLEN + SPL_PBUF_LINK_HLEN,
- PBUF_IP_HLEN + SPL_PBUF_LINK_HLEN,
- SPL_PBUF_LINK_HLEN,
- 0
-};
-
-inline struct spl_pbuf *
-spl_pbuf_alloc_hugepage (spl_pbuf_layer layer, u16_t length,
- spl_pbuf_type Type, u16_t proc_id, void *net_conn)
-{
- struct spl_pbuf *p;
- u16_t offset;
- u16_t count = 0;
- spl_netconn_t *conn = (spl_netconn_t *) net_conn;
-
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE,
- "spl_pbuf_alloc_hugepage]length=%" U16_F, length);
-
- /* determine header offset */
- if (likely (layer < SPL_PBUF_MAX_LAYER))
- {
- offset = g_offSetArry[layer];
- }
- else
- {
- NSPOL_LOGERR ("spl_pbuf_alloc_hugepage: bad pbuf layer");
- return NULL;
- }
-
- if (unlikely (length < offset || Type != SPL_PBUF_HUGE))
- {
- NSPOL_LOGERR ("input is invalid!]length=%u, Type = %d", length, Type);
- return NULL;
- }
-
- p = spl_mbuf_malloc (length, SPL_PBUF_HUGE, &count);
-
- if (p == NULL)
- {
- /* last_log_prt_time and unprint_log_count indeed have multi-thread issue,
- * but their values don't have precision requirement. No risk. */
- NS_LOG_CTRL (LOG_CTRL_HUGEPAGE_ALLOC_FAIL, STACKX, "NSLWIP", NSLOG_ERR,
- "pbuf_alloc_huge: Could not allocate PBUF for SPL_PBUF_HUGE");
-
- return NULL;
- }
-
- if (conn)
- {
- p->conn_a = ADDR_LTOSH (conn);
- }
- else
- {
- p->conn_a = 0;
- }
-
- p->tot_len -= offset;
- p->len -= offset;
- p->next_a = 0;
-
- p->payload_a = p->payload_a + offset;
-
- p->proto_type = SPL_PBUF_PROTO_NONE;
-
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE,
- "pbuf_alloc]length=%" U16_F ",p=%p", length, (void *) p);
- return p;
-}
-
-inline int
-spl_pbuf_internal_copy (struct spl_pbuf *dst, struct spl_pbuf *src)
-{
- u32_t dst_len = dst->len;
- u32_t src_len = src->len;
- u32_t dst_pos = 0;
- u32_t src_pos = 0;
- while (dst != NULL && src != NULL)
- {
- if (dst_len > src_len)
- {
- if (NULL ==
- common_memcpy (PTR_SHTOL (char *, dst->payload_a) + dst_pos,
- PTR_SHTOL (char *, src->payload_a) + src_pos,
- src_len))
- {
- NSPOL_LOGERR ("rte_memcpy error");
- return -1;
- }
-
- dst_len -= src_len;
- dst_pos += src_len;
- src = ADDR_SHTOL (src->next_a);
- src_len = src != NULL ? src->len : 0;
- src_pos = 0;
- }
- else if (dst_len < src_len)
- {
- if (NULL ==
- common_memcpy (PTR_SHTOL (char *, dst->payload_a) + dst_pos,
- PTR_SHTOL (char *, src->payload_a) + src_pos,
- dst_len))
- {
- NSPOL_LOGERR ("rte_memcpy error");
- return -1;
- }
-
- src_len -= dst_len;
- src_pos += dst_len;
- dst = ADDR_SHTOL (dst->next_a);
- dst_len = dst != NULL ? dst->len : 0;
- dst_pos = 0;
- }
- else
- {
- if (NULL ==
- common_memcpy (PTR_SHTOL (char *, dst->payload_a) + dst_pos,
- PTR_SHTOL (char *, src->payload_a) + src_pos,
- dst_len))
- {
- NSPOL_LOGERR ("rte_memcpy error");
- return -1;
- }
-
- src = ADDR_SHTOL (src->next_a);
- src_len = src != NULL ? src->len : 0;
- src_pos = 0;
- dst = ADDR_SHTOL (dst->next_a);
- dst_len = dst != NULL ? dst->len : 0;
- dst_pos = 0;
- }
- }
- return 0;
-}
-
-void
-spl_pbuf_realloc (struct spl_pbuf *p, u32_t new_len)
-{
- if (NULL != p && p->type == SPL_PBUF_HUGE)
- {
- p->tot_len = new_len;
- p->len = new_len;
- return;
- }
-}
-
-void
-spl_pbuf_free (struct spl_pbuf *p)
-{
- struct spl_pbuf *q;
- u8_t count = 0;
-
- NSPOL_LOGINF (PBUF_DEBUG, "Freeing PBF %p", p);
-
- if (unlikely (p == NULL || p->type != SPL_PBUF_HUGE))
- {
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_LEVEL_SERIOUS,
- "input param illegal]p=%p, type=%d", p, p ? p->type : -1);
- return;
- }
-
- (void) count;
-
- /* de-allocate all consecutive pbufs from the head of the chain that
- * obtain a zero reference count after decrementing*/
- do
- {
- /* remember next pbuf in chain for next iteration */
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE,
- "spl_pbuf_free: deallocating]buf=%p", (void *) p);
- q = (struct spl_pbuf *) ADDR_SHTOL (p->next_a);
- if (res_free (&p->res_chk))
- {
- //NSPOL_LOGERR("res_free failed]p=%p", p);
- }
-
- count++;
- {
- pbuf_set_recycle_flg (p, MBUF_UNUSED); /* release buf hold by app on abnormal exit */
- spl_mbuf_free ((char *) p - sizeof (struct common_mem_mbuf));
- p->res_chk.u8Reserve |= PBUF_FREE_FLAG;
- }
-
- /* proceed to next pbuf */
- p = q;
- }
- while (p != NULL);
-
- /* return number of de-allocated pbufs */
- return;
-}
-
-void
-spl_pbuf_cat (struct spl_pbuf *h, struct spl_pbuf *t)
-{
- struct spl_pbuf *p;
-
- if (h == NULL || t == NULL)
- {
- NSPOL_LOGERR ("pbuf_cat: h=NULL||t=NULL!!");
- return;
- }
-
- for (p = h; p->next_a != 0; p = PTR_SHTOL (struct spl_pbuf *, p->next_a))
- {
- /* add total length of second chain to all totals of first chain */
- p->tot_len += t->tot_len;
- }
-
- if (0 != p->next_a)
- {
- NSPOL_LOGERR
- ("pbuf_cat: p is not the last pbuf of the first chain, p->next_a != 0");
- return;
- }
-
- /* add total length of second chain to last pbuf total of first chain */
- p->tot_len += t->tot_len;
-
- /* chain last pbuf of head (p) with first of tail (t) */
- p->next_a = (uint64_t) ADDR_LTOSH_EXT (t);
-
- /* p->next now references t, but the caller will drop its reference to t,
- * so netto there is no change to the reference count of t.
- */
-}
-
-err_t
-spl_pbuf_copy (struct spl_pbuf * p_to, struct spl_pbuf * p_from)
-{
- u32_t offset_to = 0;
- u32_t offset_from = 0;
- u32_t len = 0;
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE, "pbuf_copy]p_to=%p,p_from=%p",
- (void *) p_to, (void *) p_from);
-
- if (!
- ((p_to != NULL) && (p_from != NULL)
- && (p_to->tot_len >= p_from->tot_len)))
- {
- NSPOL_LOGERR ("pbuf_copy: target not big enough to hold source");
- return ERR_ARG;
- }
-
- do
- {
- if (p_to == NULL)
- {
- NSPOL_LOGERR ("pbuf_copy: target pbuf not exist: p_to == NULL!!");
- return ERR_ARG;
- }
-
- if ((p_to->len - offset_to) >= (p_from->len - offset_from))
- {
-
- len = p_from->len - offset_from;
- }
- else
- {
-
- len = p_to->len - offset_to;
- }
-
- if (EOK !=
- MEMMOVE_S ((u8_t *) ADDR_SHTOL (p_to->payload_a) + offset_to, len,
- (u8_t *) ADDR_SHTOL (p_from->payload_a) + offset_from,
- len))
- {
- NSPOL_LOGERR ("MEMMOVE_S failed");
- return ERR_MEM;
- }
-
- offset_to += len;
- offset_from += len;
- if (offset_to > p_to->len)
- {
- NSPOL_LOGERR
- ("pbuf_copy: target offset not match: offset_to > p_to->len.");
- return ERR_VAL;
- }
- if (offset_to == p_to->len)
- {
- offset_to = 0;
- p_to = (struct spl_pbuf *) ADDR_SHTOL (p_to->next_a);
- }
-
- if (offset_from >= p_from->len)
- {
- /* on to next p_from (if any) */
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE,
- "pbuf_copy: source offset not match: offset_from >= p_from->len");
- offset_from = 0;
- p_from = (struct spl_pbuf *) ADDR_SHTOL (p_from->next_a);
- }
-
- if ((p_from != NULL) && (p_from->len == p_from->tot_len))
- {
- if ((p_from->next_a != 0))
- {
- NSPOL_LOGERR ("pbuf_copy() does not allow packet queues!");
- return ERR_VAL;
- }
- }
-
- if ((p_to != NULL) && (p_to->len == p_to->tot_len))
- {
- /* don't copy more than one packet! */
- if ((p_to->next_a != 0))
- {
- NSPOL_LOGERR ("pbuf_copy() does not allow packet queues!");
- return ERR_VAL;
- }
- }
- }
- while (p_from);
-
- NSPOL_LOGDBG (PBUF_DEBUG | STACKX_DBG_TRACE,
- "pbuf_copy: end of chain reached.");
- return ERR_OK;
-}
-
-err_t
-splpbuf_to_pbuf_transport_copy (struct pbuf * p_to, struct spl_pbuf * p_from)
-{
- if (EOK != MEMMOVE_S ((u8_t *) p_to->payload,
- p_to->len, (u8_t *) ADDR_SHTOL (p_from->payload_a),
- p_from->len))
- {
- NSPOL_LOGERR ("MEMMOVE_S failed");
- return ERR_MEM;
- }
-
- return ERR_OK;
-}
-
-err_t
-splpbuf_to_pbuf_copy (struct pbuf * p_to, struct spl_pbuf * p_from)
-{
- u32_t offset_to = 0;
- u32_t offset_from = 0;
- u32_t len = 0;
-
- NSPOL_LOGINF (NETIF_DEBUG, "splpbuf_to_pbuf_copy");
-
- if (!
- ((p_to != NULL) && (p_from != NULL)
- && (p_to->tot_len >= p_from->tot_len)))
- {
- NSPOL_LOGERR
- ("splpbuf_to_pbuf_copy: target not big enough to hold source");
- return ERR_ARG;
- }
- NSPOL_LOGINF (PBUF_DEBUG,
- "splpbuf_to_pbuf_copy]p_to=%p [type %d tot_len %d], p_from=%p [type %d tot_len %d]",
- (void *) p_to, p_to->type, p_to->tot_len, (void *) p_from,
- p_from->type, p_from->tot_len);
- do
- {
- NSPOL_LOGINF (NETIF_DEBUG, "copying....");
- if (p_to == NULL)
- {
- NSPOL_LOGERR
- ("splpbuf_to_pbuf_copy: target not big enough to hold source p_to len [%d] p_from len [%d]",
- p_to->tot_len, p_from->tot_len);
- return ERR_ARG;
- }
-
- if ((p_to->len - offset_to) >= (p_from->len - offset_from))
- {
-
- len = p_from->len - offset_from;
- }
- else
- {
-
- len = p_to->len - offset_to;
- }
-
- if (EOK != MEMMOVE_S ((u8_t *) p_to->payload + offset_to,
- len,
- (u8_t *) ADDR_SHTOL (p_from->payload_a) +
- offset_from, len))
- {
- NSPOL_LOGERR ("MEMMOVE_S failed");
- return ERR_MEM;
- }
-
- offset_to += len;
- offset_from += len;
- if (offset_to > p_to->len)
- {
- NSPOL_LOGERR
- ("splpbuf_to_pbuf_copy: target offset not match: offset_to > p_to->len.");
- return ERR_VAL;
- }
- if (offset_to == p_to->len)
- {
- offset_to = 0;
- p_to = p_to->next;
-
- NSPOL_LOGINF (NETIF_DEBUG,
- "splpbuf_to_pbuf_copy: p_to next %p", p_to);
- }
-
- if (offset_from >= p_from->len)
- {
- /* on to next p_from (if any) */
- NSPOL_LOGINF (NETIF_DEBUG,
- "splpbuf_to_pbuf_copy: source offset not match: offset_from >= p_from->len");
- offset_from = 0;
- p_from = (struct spl_pbuf *) ADDR_SHTOL (p_from->next_a);
- NSPOL_LOGINF (NETIF_DEBUG,
- "splpbuf_to_pbuf_copy: pfrom next %p", p_from);
- }
-
- if ((p_from != NULL) && (p_from->len == p_from->tot_len))
- {
- if ((p_from->next_a != 0))
- {
- NSPOL_LOGERR
- ("splpbuf_to_pbuf_copy() does not allow packet queues!");
- return ERR_VAL;
- }
- }
-
- if ((p_to != NULL) && (p_to->len == p_to->tot_len))
- {
- /* don't copy more than one packet! */
- if ((p_to->next != NULL))
- {
- NSPOL_LOGERR
- ("splpbuf_to_pbuf_copy() does not allow packet queues!");
- return ERR_VAL;
- }
- }
- }
- while (p_from);
-
- NSPOL_LOGDBG (NETIF_DEBUG, "splpbuf_to_pbuf_copy: end of chain reached.");
- return ERR_OK;
-}
-
-err_t
-pbuf_to_splpbuf_copy (struct spl_pbuf * p_to, struct pbuf * p_from)
-{
- int offset = 0;
- void *data = NULL;
-
- do
- {
- data = (u8_t *) (p_to->payload_a) + offset;
- memcpy (data, (u8_t *) p_from->payload, p_from->len);
- offset = offset + p_from->len;
- if (offset >= 2048)
- {
- NSPOL_LOGERR ("More thank 2K size");
- return ERR_MEM;
- }
- p_from = p_from->next;
- }
- while (p_from != NULL);
-
- return ERR_OK;
-}
-
-struct pbuf *
-spl_convert_spl_pbuf_to_pbuf (struct spl_pbuf *p_from)
-{
- struct pbuf *p_to = NULL;
-
- p_to = pbuf_alloc (PBUF_RAW, p_from->tot_len, PBUF_POOL);
- if (p_to)
- {
- splpbuf_to_pbuf_copy (p_to, p_from);
- }
- return p_to;
-}
-
-spl_pbuf_layer
-get_pbuf_layer_from_pbuf_payload (struct pbuf * buf)
-{
-
- struct eth_hdr *ethhdr;
- spl_pbuf_layer layer = SPL_PBUF_TRANSPORT;
- u16_t type;
-
- if (buf->len <= SIZEOF_ETH_HDR)
- {
- NSPOL_LOGINF (PBUF_DEBUG,
- "get_pbuf_layer_from_payload failed. length is wrong");
- return layer;
- }
- ethhdr = (struct eth_hdr *) buf->payload;
- type = spl_htons (ethhdr->type);
-
- NSPOL_LOGINF (PBUF_DEBUG, "packet type %x", type);
-
- switch (type)
- {
- case ETHTYPE_IP:
- layer = SPL_PBUF_IP;
- break;
- case ETHTYPE_ARP:
- layer = SPL_PBUF_LINK;
- break;
- default:
- layer = SPL_PBUF_TRANSPORT;
- break;
- }
-
- return layer;
-}
-
-void
-print_pbuf_payload_info (struct pbuf *buf, bool send)
-{
-
- struct eth_hdr *ethhdr;
- u16_t type;
-
- if (buf->len <= SIZEOF_ETH_HDR)
- {
- NSPOL_LOGINF (PBUF_DEBUG,
- "get_pbuf_layer_from_payload failed. length is wrong");
- return;
- }
- ethhdr = (struct eth_hdr *) buf->payload;
- type = spl_htons (ethhdr->type);
-
- if (send)
- {
- NSPOL_LOGINF (PBUF_DEBUG, "send packet start type %x len %d *****",
- type, buf->len);
- }
- else
- {
- NSPOL_LOGINF (PBUF_DEBUG,
- "receive packet start type %x len %d ########", type,
- buf->len);
- }
-
- switch (type)
- {
- case ETHTYPE_IP:
- NSPOL_LOGINF (TCPIP_DEBUG, "ip packet len %d tot len %d type %x",
- buf->len, buf->tot_len, type);
- struct ip_hdr *ip =
- (struct ip_hdr *) ((char *) buf->payload + SIZEOF_ETH_HDR);
- NSPOL_LOGINF (PBUF_DEBUG, "ip packet src %x dest %x proto %d", ip->src,
- ip->dest, ip->_proto);
- break;
- case ETHTYPE_ARP:
- NSPOL_LOGINF (TCPIP_DEBUG, "arp packet len %d tot len %d type %x",
- buf->len, buf->tot_len, type);
- break;
- default:
- NSPOL_LOGINF (TCPIP_DEBUG, "other packet len %d tot len %d type %x",
- buf->len, buf->tot_len, type);
- break;
- }
- return;
-}
diff --git a/stacks/lwip_stack/lwip_src/core/spl_timers.c b/stacks/lwip_stack/lwip_src/core/spl_timers.c
deleted file mode 100644
index cfa130b..0000000
--- a/stacks/lwip_stack/lwip_src/core/spl_timers.c
+++ /dev/null
@@ -1,607 +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 "opt.h"
-#include "nsfw_mem_api.h"
-#include "def.h"
-#include "sc_dpdk.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "nstack_share_res.h"
-
-#include <time.h>
-#include <signal.h>
-#include <pthread.h>
-#include <syscall.h>
-#include "nsfw_ps_api.h"
-#include "spl_timers.h"
-#include "common_mem_api.h"
-
-extern sys_thread_t g_timerThread_id;
-
-/*Since the range of the dpdk read TSC value is u64_t, it changes*/
-
-#ifndef typecheck
-#define typecheck(type, x) \
-({ type __dummy; \
- typeof(x)__dummy2; \
- (void)(&__dummy == &__dummy2); \
- 1; \
- })
-#endif
-
-#ifndef time_after_eq
-#define time_after_eq(a, b) \
-(typecheck(unsigned long, a) \
- && typecheck(unsigned long, b) \
- && ((long)(a) - (long)(b) >= 0))
-#endif
-
-#define MIN_TIME_PICE 50
-#define MICRO_PER_SECOND 1000
-#define NANO_PER_MICROSECOND 1000000
-#define NANO_PER_SECOND 1000000000
-
-#define PTIMER_MSG_BUFFER_SIZE 4096
-
-#define PTIMER_STATE_INACTIVE 0x00
-#define PTIMER_STATE_ENQUEUED 0x01
-#define gettid() syscall(__NR_gettid)
-
-#define TIMER_CONTEXT_NAME "TIMER_CONTEXT_NAME"
-
-static timer_t lazy_tim;
-static timer_t lazy_tim_retry;
-static struct ptimer_base ptimer;
-static sys_sem_t ptimer_lock;
-
-extern void recycle_tmr (struct ptimer_node *tmo);
-
-extern nstack_tick_info_t g_nstack_timer_tick;
-
-/*
- ***************************
- * rb_tree wrapper function*
- ***************************
- */
-NSTACK_STATIC void
-remove_ptimer (struct ptimer_node *tmo, struct ptimer_base *base)
-{
- if (tmo == NULL)
- {
- NSPOL_LOGERR ("input parameter tmo is null");
- return;
- }
- if (!(tmo->state & PTIMER_STATE_ENQUEUED))
- {
- NSPOL_LOGWAR (TIMERS_DEBUG | LWIP_DBG_LEVEL_WARNING,
- "the timer state is: PTIMER_STATE_INACTIVE, no need to remove!");
- return;
- }
-
- if (base->first == &tmo->node)
- {
- base->first = rb_next (&tmo->node);
- }
-
- rb_erase (&tmo->node, &base->active);
-
- tmo->state = PTIMER_STATE_INACTIVE;
-}
-
-NSTACK_STATIC struct ptimer_node *
-search_ptimer (struct ptimer_msg *msg)
-{
- if (msg == NULL)
- {
- NSPOL_LOGERR ("input parameter msg is null");
- return NULL;
- }
- if (msg->node)
- {
- return msg->node;
- }
-
- return NULL;
-
-}
-
-err_t
-del_ptimer (struct ptimer_msg * msg)
-{
- struct ptimer_node *tmo;
-
- tmo = search_ptimer (msg);
- if (tmo)
- {
- remove_ptimer (tmo, &ptimer);
- NSPOL_LOGDBG (TIMERS_DEBUG, "del]thread=%u,ptimer_node=%p", tmo->index,
- tmo);
- return ERR_OK;
- }
-
- NSPOL_LOGERR ("ptime_node not found!!");
- return ERR_VAL;
-}
-
-/*
- * Ptimer inserted into rb_tree
- * @param node: the ptimer node pointer
- * @param base: the ptimer root_base pointer
- */
-NSTACK_STATIC void
-enqueue_ptimer (struct ptimer_node *tmo, struct ptimer_base *base)
-{
- struct rb_node **linknode;
- struct rb_node *parent = NULL;
- struct ptimer_node *entry;
- int leftmost = 1;
- if (tmo == NULL || base == NULL)
- {
- NSPOL_LOGERR ("input parameter is null");
- return;
- }
-
- if ((tmo->state & PTIMER_STATE_ENQUEUED))
- {
- NSPOL_LOGWAR (TIMERS_DEBUG | LWIP_DBG_LEVEL_WARNING,
- "the timer state is: PTIMER_STATE_ENQUEUED");
- return;
- }
-
- linknode = &base->active.rb_node;
- while (*linknode)
- {
- parent = *linknode;
- entry = rb_entry (parent, struct ptimer_node, node);
- //XXX: do by the equal case is all of price of the large case
- if (time_after_eq (entry->abs_nsec, tmo->abs_nsec))
- {
- linknode = &(*linknode)->rb_left;
- }
- else
- {
- linknode = &(*linknode)->rb_right;
- leftmost = 0;
- }
- }
-
- /*
- * Insert the timer to the rb_tree and check whether it
- * replaces the first pending timer
- */
- if (leftmost)
- {
- base->first = &tmo->node;
- }
-
- rb_link_node (&tmo->node, parent, linknode);
- rb_insert_color (&tmo->node, &base->active);
- NSPOL_LOGDBG (TIMERS_DEBUG, "enqueue]thread=%u,ptimer_node=%p", tmo->index,
- tmo);
- tmo->state |= PTIMER_STATE_ENQUEUED;
-}
-
-void
-launch_tmr (timer_t * tim, u64_t nsec)
-{
- struct itimerspec vtim;
-
- vtim.it_value.tv_sec = (nsec) / NANO_PER_SECOND;
- vtim.it_value.tv_nsec = (nsec) % NANO_PER_SECOND;
- vtim.it_interval.tv_sec = 0;
- vtim.it_interval.tv_nsec = 0;
-
- if (timer_settime (*tim, 0, &vtim, NULL) < 0)
- {
- NSPOL_LOGERR ("add_ptimer:timer_settime failed");
- }
-
-}
-
-/*
- * add ptimer to rb_tree
- * @param tmo: the ptimer node pointer
- */
-void
-add_ptimer (struct ptimer_node *tmo)
-{
- if (tmo == NULL)
- {
- NSPOL_LOGERR ("input parameter is null");
- return;
- }
- enqueue_ptimer (tmo, &ptimer);
-
- if (ptimer.first == &tmo->node)
- {
- launch_tmr (&lazy_tim, tmo->info.msec * NANO_PER_MICROSECOND);
- }
-}
-
-#if 1
-/*
- * cond signal ,send a ptimer message
- * @param type: the message type
- * @param handler: timeout handler
- * @param node: the ptimer node pointer
- */
-void
-regedit_ptimer (enum msg_type Type, sys_timeout_handler handler,
- struct ptimer_node *node)
-{
- (void) handler;
- (void) pthread_mutex_lock (&ptimer.lock);
- if (ptimer.tail == NULL)
- {
- (void) pthread_mutex_unlock (&ptimer.lock);
- NSPOL_LOGERR ("ptimer.tail is null");
- free (node);
- node = NULL;
- return;
- }
- ptimer.tail->msg_type = Type;
- ptimer.tail->node = node;
- ptimer.tail = ptimer.tail->next;
- if (ptimer.head == ptimer.tail)
- {
- (void) pthread_mutex_unlock (&ptimer.lock);
- NSPOL_LOGERR ("ptimer.head equal to ptimer.tail");
- return;
- }
-
- (void) pthread_kill (g_timerThread_id, SIGRTMIN + 2);
-
- (void) pthread_mutex_unlock (&ptimer.lock);
- return;
-}
-#endif
-/*
- * deal with the timeout signal
- *
- */
-void
-deal_timeout_sig (void)
-{
- struct ptimer_node *tmo;
- struct timespec now;
- unsigned long abs_nsec;
- err_t err;
- int retval;
- if (ptimer.first == NULL)
- {
- return;
- }
- tmo = rb_entry (ptimer.first, struct ptimer_node, node);
- retval = clock_gettime (CLOCK_MONOTONIC, &now);
- if (0 != retval)
- {
- NSPOL_LOGERR ("clock_gettime failed]retval=%d,errno=%d", retval, errno);
- }
- abs_nsec = now.tv_sec * NANO_PER_SECOND + now.tv_nsec;
-
- // deal with all timeout point
- while (time_after_eq (abs_nsec, tmo->abs_nsec))
- {
- remove_ptimer (tmo, &ptimer);
-
- if (tmo->info.flags & PTIMER_ONESHOT)
- {
- }
- else
- {
- //re-entry periodic ptimer
- tmo->abs_nsec = now.tv_sec * NANO_PER_SECOND + now.tv_nsec
- + tmo->info.msec * NANO_PER_MICROSECOND;
- add_ptimer (tmo);
- }
-
- //send timeout message
- NSPOL_LOGDBG (INTERRUPT_DEBUG,
- "ptimer happened to thread_index]index=%u", tmo->index);
- if ((err = ltt_apimsg (tmo->info._phandle, (void *) tmo)))
- {
- NSPOL_LOGWAR (TIMERS_DEBUG | LWIP_DBG_LEVEL_WARNING,
- "send timeout message failed!]errno=%d", err);
- }
-
- if (ptimer.first == NULL)
- {
- NSPOL_LOGERR ("deal_timeout_sig: ptimer.first == NULL!!");
- return;
- }
- tmo = rb_entry (ptimer.first, struct ptimer_node, node);
- }
-
- if (tmo->abs_nsec <= abs_nsec)
- {
- NSPOL_LOGERR ("tmo->abs_nsec is smaller than abs_nsec");
- return;
- }
-
- NSPOL_LOGDBG (TIMERS_DEBUG, "TIMERSIGNAL : Launch timer for]time=%ul",
- tmo->abs_nsec - abs_nsec);
- launch_tmr (&lazy_tim, tmo->abs_nsec - abs_nsec); //timer interupted eveny 50ms instand by tmo->abs_nsec
-}
-
-/*
- * timeout signal handle function
- * @param v: unused argument
- */
-/*ptimer is already protected and used*/
-
-NSTACK_STATIC void
-timeout_sigaction (int sig)
-{
- (void) sig;
- if (!sys_arch_sem_trywait (&ptimer_lock))
- {
- launch_tmr (&lazy_tim_retry,
- (MIN_TIME_PICE / 5) * NANO_PER_MICROSECOND);
- return;
- }
-
- deal_timeout_sig ();
-
- sys_sem_signal (&ptimer_lock);
-
- return;
-}
-
-/*
- * initialize the ptimer buffer and timing mechanism
- */
-err_t
-init_ptimer (void)
-{
- int i, retval;
- struct sigevent timer_event;
- struct sigevent timer_event1;
- struct ptimer_msg *ptr;
-
- if (pthread_mutex_init (&ptimer.lock, NULL))
- {
- NSPOL_LOGERR ("pthread_mutex_init failed");
- return ERR_MEM;
- }
- /*codex fix */
- if (ERR_MEM == sys_sem_new (&ptimer_lock, 1))
- {
- NSPOL_LOGERR ("init_ptimer: sys_sem_new failure");
- return ERR_MEM;
- }
-
- ptimer.active.rb_node = NULL;
- ptimer.first = NULL;
-
- ptr =
- (struct ptimer_msg *) malloc (PTIMER_MSG_BUFFER_SIZE *
- sizeof (struct ptimer_msg));
- if (!ptr)
- {
- NSPOL_LOGERR ("init_ptimer: malloc ptimer buffer failed!");
- return ERR_MEM;
- }
-
- int ret =
- MEMSET_S (ptr, (PTIMER_MSG_BUFFER_SIZE * sizeof (struct ptimer_msg)),
- 0, (PTIMER_MSG_BUFFER_SIZE * sizeof (struct ptimer_msg)));
- if (EOK != ret)
- {
- free (ptr);
- NSPOL_LOGERR ("init_ptimer: MEMSET_S ptimer buffer failed]ret=%d", ret);
- return ERR_MEM;
- }
-
- for (i = 0; i < PTIMER_MSG_BUFFER_SIZE - 1; i++)
- {
- ptr[i].next = &ptr[(i + 1)];
- ptr[(i + 1)].prev = &ptr[i];
- }
-
- ptr[i].next = &ptr[0];
- ptr[0].prev = &ptr[i];
- ptimer.head = ptimer.tail = &ptr[0];
- retval =
- MEMSET_S (&timer_event, sizeof (struct sigevent), 0,
- sizeof (struct sigevent));
- if (EOK != retval)
- {
- free (ptr);
- ptr = NULL;
- NSPOL_LOGERR ("MEMSET_S failed]ret=%d", retval);
- return ERR_VAL;
- }
- timer_event.sigev_notify = SIGEV_SIGNAL;
- timer_event.sigev_signo = SIGRTMIN;
- timer_event.sigev_value.sival_ptr = (void *) &lazy_tim;
- timer_event1 = timer_event;
- timer_event1.sigev_value.sival_ptr = (void *) &lazy_tim_retry;
-
- if (timer_create (CLOCK_MONOTONIC, &timer_event, &lazy_tim) < 0)
- {
- free (ptr);
- ptr = NULL;
- NSPOL_LOGERR ("ptimer_init: timer_create failed!");
- return ERR_VAL;
- }
-
- if (timer_create (CLOCK_MONOTONIC, &timer_event1, &lazy_tim_retry) < 0)
- {
- free (ptr);
- ptr = NULL;
- NSPOL_LOGERR ("ptimer_init: timer_create failed!");
- return ERR_VAL;
- }
-
- return ERR_OK;
-}
-
-NSTACK_STATIC err_t
-process_timeout_msg (struct ptimer_msg * msg)
-{
- struct ptimer_node *tmo = msg->node;
- struct timespec now;
-
- switch (msg->msg_type)
- {
- case SYS_PTIMEROUT_MSG:
- if (tmo)
- {
- int retval = clock_gettime (CLOCK_MONOTONIC, &now);
- if (0 != retval)
- {
- NSPOL_LOGERR ("clock_gettime failed]retval=%d,errno=%d", retval,
- errno);
- }
- tmo->abs_nsec = now.tv_sec * NANO_PER_SECOND + now.tv_nsec
- + tmo->info.msec * NANO_PER_MICROSECOND;
- add_ptimer (tmo);
- }
- else
- {
- NSPOL_LOGERR ("process_timeout_msg: rb_node is NULL!");
- return ERR_MEM;
- }
-
- break;
- case SYS_UNPTIMEROUT_MSG:
- if (del_ptimer (msg) != ERR_OK)
- {
- NSPOL_LOGERR
- ("process_timeout_msg: can not find the timeout event(oops)!");
- }
-
- break;
- default:
- NSPOL_LOGERR
- ("process_timeout_msg: oops! lwip timeout_thread receive unacquainted message!");
- break;
- }
-
- return ERR_OK;
-}
-
-void
-ptimer_thread (void *arg)
-{
- LWIP_UNUSED_ARG (arg);
- int sig, ret = -1;
- sigset_t waitset;
- sigset_t oset;
- struct ptimer_msg *msg;
-
- if (0 != sigemptyset (&waitset))
- {
- NSTCP_LOGERR ("sigemptyset function call error");
- return;
- }
-
- if (0 != sigaddset (&waitset, SIGRTMIN))
- {
- NSTCP_LOGERR ("sigaddset function call error");
- return;
- }
-
- if (0 != sigaddset (&waitset, SIGRTMIN + 2))
- {
- NSTCP_LOGERR ("sigaddset function call error");
- return;
- }
-
- (void) pthread_sigmask (SIG_BLOCK, &waitset, &oset);
-
- (void) pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);
- (void) pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
- NSPOL_LOGDBG (TIMERS_DEBUG, "ptimer: init done !");
-
- if (!g_nstack_timer_tick.tick_ptr)
- {
- NSTCP_LOGERR ("g_nstack_timer_tick not inited");
- return;
- }
- (void) gettimeofday (&g_nstack_timer_tick.ref_time, NULL);
- g_nstack_timer_tick.interval = 100;
- *g_nstack_timer_tick.tick_ptr = 0;
- g_nstack_timer_tick.ref_tick = 0;
- while (1)
- {
- ret = sigwait (&waitset, &sig);
- (void) nsfw_thread_chk (); // will only return TRUE, no need to check return value
- if (ret != -1)
- {
- /* for timer expirt handle */
- if (SIGRTMIN == sig)
- {
- timeout_sigaction (sig);
- continue;
- }
- }
- else
- {
- continue;
- }
-
- while (1)
- {
- (void) pthread_mutex_lock (&ptimer.lock);
- if (ptimer.head == ptimer.tail)
- {
- (void) pthread_mutex_unlock (&ptimer.lock);
- break;
- }
-
- msg = ptimer.head;
- ptimer.head = ptimer.head->next;
- (void) pthread_mutex_unlock (&ptimer.lock);
-
- sys_arch_sem_wait (&ptimer_lock, 0);
-
- if (process_timeout_msg (msg) != ERR_OK)
- {
- NSPOL_LOGERR ("oops: ptimer_thread panic!");
- }
-
- sys_sem_signal (&ptimer_lock);
- }
- }
-}
-
-void
-timeout_phandler (void *act, void *arg)
-{
- struct ptimer_node *tmo = arg;
- if (act == NULL)
- {
- NSPOL_LOGERR ("input parameter arg is null");
- return;
- }
-
- NSPOL_LOGINF (TIMERS_DEBUG, "Timer expire @timeout_phandler Handle %p",
- tmo->info._phandle);
- if (tmo->info.flags & PTIMER_ONESHOT)
- {
- sys_timeout_handler handle = act;
- handle (tmo->info.ctx);
- return;
- }
- else
- {
- NSPOL_LOGINF (TIMERS_DEBUG,
- "Timer expire error @timeout_phandler Handle %p",
- tmo->info._phandle);
- }
-}
diff --git a/stacks/lwip_stack/lwip_src/core/unmatch_version.c b/stacks/lwip_stack/lwip_src/core/unmatch_version.c
deleted file mode 100644
index 6c8cad3..0000000
--- a/stacks/lwip_stack/lwip_src/core/unmatch_version.c
+++ /dev/null
@@ -1,59 +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 "nsfw_mem_api.h"
-#include "nstack_share_res.h"
-#include "nstack_securec.h"
-
-char *g_nstack_ver_info = NULL;
-
-int
-init_unmatch_version (void)
-{
- int ret;
- nsfw_mem_zone mzone;
-
- ret =
- STRCPY_S (mzone.stname.aname, NSFW_MEM_NAME_LENGTH, NSTACK_VERSION_SHM);
- if (EOK != ret)
- {
- NSPOL_LOGERR ("STRCPY_S fail]ret=%d", ret);
- return -1;
- }
- mzone.stname.entype = NSFW_SHMEM;
- mzone.isocket_id = -1;
- mzone.length =
- NSTACK_VERSION_LEN + MAX_UNMATCH_VER_CNT * sizeof (unmatch_ver_info_t);
- mzone.ireserv = 0;
-
- char *version = (char *) nsfw_mem_zone_create (&mzone);
- if (NULL == version)
- {
- NSPOL_LOGERR ("Failed to create unmatch_version memory");
- return -1;
- }
-
- ret = STRCPY_S (version, NSTACK_VERSION_LEN, NSTACK_VERSION);
- if (EOK != ret)
- {
- NSPOL_LOGERR ("STRCPY_S NSTACK_VERSION fail]ret=%d", ret);
- return -1;
- }
-
- g_nstack_ver_info = version;
-
- return 0;
-}
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/config_common.h b/stacks/lwip_stack/lwip_src/include/ip_module/config_common.h
deleted file mode 100644
index 0c88139..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/config_common.h
+++ /dev/null
@@ -1,64 +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.
-*/
-
-#ifndef _NSTACK_CONFIG_COMMON_H_
-#define _NSTACK_CONFIG_COMMON_H_
-
-#include "ip_module_api.h"
-
-#define MAX_IP_MODULE_BUFF_SIZE 1024*1024
-
-/* ip module config types */
-#define IP_MODULE_TYPE_IP "ip"
-#define IP_MODULE_TYPE_NETWORK "network"
-#define IP_MODULE_TYPE_PORT "port"
-#define IP_MODULE_TYPE_SETLOG "setlog"
-#define IP_MODULE_TYPE_SNAPSHOT "snapshot"
-#define IP_MODULE_TYPE_SETTRACE "settrace"
-
-#define TCP_MODULE_TYPE_SET_OOS_LEN "ooslen"
-
-#define IP_MODULE_NAME "./nStackCtrl: "
-#define IP_MODULE_INVALID_ARGUMENT_S "invalid argument -- \"%s\"\n"
-#define IP_MODULE_MORE_OPTION "need more options -- "
-#define IP_MODULE_LESS_OPTION "no need option -- "
-
-/* Error codes */
-#define IP_MODULE_OK 0
-#define IP_MODULE_DATA_ERROR 1
-#define IP_MODULE_DATA_NOT_EXIST 2
-
-struct config_param
-{
- int action;
- char type[IP_MODULE_LENGTH_256];
- char name[IP_MODULE_LENGTH_256];
- char value[IP_MODULE_LENGTH_64];
- char container_id[IP_MODULE_LENGTH_256];
- int error;
-
- char error_desc[NSCRTL_ERRBUF_LEN];
-
- u64 traceid;
-};
-
-struct config_data
-{
- struct config_param param;
- char json_buff[MAX_IP_MODULE_BUFF_SIZE - sizeof (struct config_param)];
-};
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/configuration_reader.h b/stacks/lwip_stack/lwip_src/include/ip_module/configuration_reader.h
deleted file mode 100644
index 779ace8..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/configuration_reader.h
+++ /dev/null
@@ -1,26 +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.
-*/
-
-#ifndef _CONFIGURATION_READER_H
-#define _CONFIGURATION_READER_H
-#include <semaphore.h>
-#include "config_common.h"
-
-struct config_data *get_config_data ();
-int get_str_value (const char *arg);
-int setlog_level_value (const char *param, const char *value);
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/container_ip.h b/stacks/lwip_stack/lwip_src/include/ip_module/container_ip.h
deleted file mode 100644
index e83c607..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/container_ip.h
+++ /dev/null
@@ -1,39 +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.
-*/
-
-#ifndef _CONTAINER_IP_H
-#define _CONTAINER_IP_H
-#include "ip_module_api.h"
-#include "json.h"
-
-struct ip_action_param
-{
- char container_id[IP_MODULE_LENGTH_256];
- char port_name[IP_MODULE_LENGTH_256];
-};
-
-void free_container (struct container_ip *container, bool_t only_free);
-struct container_port *parse_port_obj (struct json_object *port_obj);
-struct container_ip *parse_container_ip_json (char *param);
-int add_container (struct container_ip *container);
-struct container_ip *get_container_by_container_id (char *container_id);
-
-int del_port (char *container_id, char *port_name);
-struct container_port *get_port (char *container_id, char *port_name);
-struct container_port *get_port_from_container (struct container_port *port);
-int getIpCfgAll (char *jsonBuf, size_t size);
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/ip_module_api.h b/stacks/lwip_stack/lwip_src/include/ip_module/ip_module_api.h
deleted file mode 100644
index acf5057..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/ip_module_api.h
+++ /dev/null
@@ -1,223 +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.
-*/
-
-#ifndef _IP_MODULE_API_H_
-#define _IP_MODULE_API_H_
-#include "types.h"
-
-typedef int bool_t;
-#define IP_MODULE_TRUE 1
-#define IP_MODULE_FALSE 0
-#define IP_MODULE_LENGTH_32 32
-#define IP_MODULE_LENGTH_64 64
-#define IP_MODULE_LENGTH_256 256
-#define IP_MODULE_LENGTH_1024 1024
-#define IP_MODULE_SUBNET_MASK_LEN IP_MODULE_LENGTH_32
-#define IP_MODULE_MAX_NAME_LEN IP_MODULE_LENGTH_256
-#define IP_MODULE_PORT_JSON_LEN (2048 * 2)
-#define IP_MODULE_NETWORK_JSON_LEN (2048 * 2)
-#define MAX_NETWORK_COUNT IP_MODULE_LENGTH_64
-#define MAX_NETWORK_IP_COUNT IP_MODULE_LENGTH_1024
-#define MAX_NETWORK_NUM (MAX_NETWORK_COUNT * 2)
-COMPAT_PROTECT (MAX_NETWORK_NUM, 128);
-#define MAX_PORT_NUM (MAX_NETWORK_IP_COUNT * 2)
-COMPAT_PROTECT (MAX_PORT_NUM, 2048);
-#define NSCRTL_ERRBUF_LEN IP_MODULE_LENGTH_256
-
-#define INVALID_EXPIRE_TIME 0x7FFFFFFF
-#define NSTACLCTRL_MAX_TRY_TIMES 60
-
-/*sockaddr_un.sun_path is an array of 108 bytes*/
-#define IP_MODULE_MAX_PATH_LEN 108
-
-typedef enum enumADERRCODE
-{
- NSCRTL_OK = 0,
- NSCRTL_ERR,
- NSCRTL_RD_NOT_EXIST,
- NSCRTL_RD_EXIST = 3,
- NSCRTL_INPUT_ERR,
- NSCRTL_STATUS_ERR,
- NSCRTL_NETWORK_COUNT_EXCEED,
- NSCRTL_IP_COUNT_EXCEED,
- NSCRTL_FREE_ALL_PORT, //when all ports in container were deleted, need to free container.
-
- NSCRTL_MAX_ERR = 127
-} NSCRTL_ERR_CODE;
-
-#define NSOPR_SET_ERRINFO(_errno, fmt, ...) \
- {\
- struct config_data* cf_data = get_config_data(); \
- if (cf_data)\
- {\
- size_t len_error_desc = strlen(cf_data->param.error_desc); \
- cf_data->param.error = _errno; \
- if ((_errno != NSCRTL_OK) && (len_error_desc < NSCRTL_ERRBUF_LEN))\
- {\
- if (-1 == (SNPRINTF_S(cf_data->param.error_desc + len_error_desc, \
- NSCRTL_ERRBUF_LEN - len_error_desc, NSCRTL_ERRBUF_LEN - len_error_desc - 1, fmt, ## __VA_ARGS__)))\
- {\
- NSOPR_LOGERR("SNPRINTF_S failed]"); \
- } \
- } \
- } \
- } \
-
-struct ref_nic
-{
- struct ref_nic *next;
- char nic_name[IP_MODULE_MAX_NAME_LEN];
-};
-
-struct phy_net
-{
- struct ref_nic *header;
- char bond_name[IP_MODULE_MAX_NAME_LEN];
- int bond_mode;
-};
-
-struct container_port_ip_cidr
-{
- struct container_port_ip_cidr *next;
- unsigned int ip;
- unsigned int mask_len;
-};
-
-struct container_multicast_id
-{
- struct container_multicast_id *next;
- unsigned int ip;
-};
-
-typedef struct
-{
- char port_json[IP_MODULE_PORT_JSON_LEN];
-} port_buffer;
-
-struct container_port
-{
- struct container_port *next;
- struct container_port_ip_cidr *ip_cidr_list;
- struct container_multicast_id *multicast_list;
- char port_name[IP_MODULE_MAX_NAME_LEN];
- port_buffer *buffer;
-};
-
-#define get_port_json(obj) obj->buffer->port_json
-
-struct container_ip
-{
- struct container_ip *next;
- struct container_port *ports_list;
- char container_id[IP_MODULE_MAX_NAME_LEN];
-};
-
-struct container_list
-{
- struct container_ip *header;
-};
-
-struct ip_subnet
-{
- struct ip_subnet *next;
- unsigned int subnet;
- unsigned int mask_len;
-};
-
-typedef struct
-{
- char network_json[IP_MODULE_NETWORK_JSON_LEN];
-} network_buffer;
-
-struct network_configuration
-{
- struct network_configuration *next;
- struct phy_net *phy_net;
- struct ip_subnet *ip_subnet;
- char network_name[IP_MODULE_MAX_NAME_LEN];
- char type_name[IP_MODULE_MAX_NAME_LEN];
- char nic_type_name[IP_MODULE_MAX_NAME_LEN];
- network_buffer *buffer;
-};
-
-#define get_network_json(obj) obj->buffer->network_json
-
-struct network_list
-{
- struct network_configuration *header;
-};
-
-void ip_subnet_print (struct ip_subnet *subnet);
-bool_t is_in_same_network (unsigned int src_ip, unsigned int dst_ip);
-bool_t is_ip_match_netif (unsigned int ip, char *netif_name);
-bool_t is_ip_exist (unsigned int ip);
-struct network_configuration *get_network_list ();
-inline struct network_configuration *get_network_by_ip_with_tree (unsigned int
- ip);
-
-/* "type" option */
-typedef enum
-{
- IP_MODULE_NETWORK,
- IP_MODULE_IP,
- IP_MODULE_NETWORK_ALL,
- IP_MODULE_IP_ALL,
- IP_MODULE_ALL,
-} ip_module_type;
-
-/* "action" option */
-typedef enum
-{
- IP_MODULE_OPERATE_NULL,
- IP_MODULE_OPERATE_ADD,
- IP_MODULE_OPERATE_DEL,
- IP_MODULE_OPERATE_QUERY,
- IP_MODULE_OPERATE_SET,
- IP_MODULE_GET_VERSION,
- IP_MODULE_QUERY_NET,
- IP_MODULE_MAX, //new type should be added before IP_MODULE_MAX
- IP_MODULE_BOTTOM = 0xFFFFFFFF
-} ip_module_operate_type;
-
-typedef int (*post_to_fn) (void *arg, ip_module_type type,
- ip_module_operate_type operate_type);
-typedef int (*add_netif_ip_fn) (char *netif_name, unsigned int ip,
- unsigned int mask);
-typedef int (*del_netif_ip_fn) (char *netif_name, unsigned int ip);
-
-typedef struct
-{
- post_to_fn post_to;
- add_netif_ip_fn add_netif_ip;
- del_netif_ip_fn del_netif_ip;
-} output_api;
-
-void regist_output_api (output_api * api);
-output_api *get_output_api ();
-int init_configuration_reader ();
-int process_post (void *arg, ip_module_type type,
- ip_module_operate_type operate_type);
-int process_configuration (void *arg, ip_module_type type,
- ip_module_operate_type operate_type);
-
-port_buffer *malloc_port_buffer ();
-void free_port_buffer (port_buffer * buffer);
-network_buffer *malloc_network_buffer ();
-void free_network_buffer (network_buffer * buffer);
-int get_network_json_data ();
-int get_ip_json_data ();
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/network.h b/stacks/lwip_stack/lwip_src/include/ip_module/network.h
deleted file mode 100644
index 117b71c..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/network.h
+++ /dev/null
@@ -1,36 +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.
-*/
-
-#ifndef _NETWORK_H
-#define _NETWORK_H
-#include "ip_module_api.h"
-
-void free_network_configuration (struct network_configuration *network,
- bool_t only_free);
-struct network_configuration *parse_network_obj (struct json_object
- *network_obj);
-struct network_configuration *parse_network_json (char *param,
- struct network_configuration
- *network_list);
-int add_network_configuration (struct network_configuration
- *network_configuration);
-struct network_configuration *get_network_by_name (char *name);
-struct network_configuration *get_network_by_nic_name (char *name);
-int del_network_by_name (char *name);
-int get_network_all (char *jsonBuf, size_t size);
-int nic_already_init (const char *nic_name);
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ip_module/trp_rb_tree.h b/stacks/lwip_stack/lwip_src/include/ip_module/trp_rb_tree.h
deleted file mode 100644
index ef0ac37..0000000
--- a/stacks/lwip_stack/lwip_src/include/ip_module/trp_rb_tree.h
+++ /dev/null
@@ -1,77 +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.
-*/
-
-#ifndef __TRP_RB_TREE_H__
-#define __TRP_RB_TREE_H__
-
-typedef void *trp_key_t;
-typedef void *trp_data_t;
-
-#define RB_RED 0
-#define RB_BLACK 1
-
-typedef int (*key_compare) (trp_key_t left, trp_key_t right); // return > 0 left > right, return 0 left = right, return < 0 left < right
-
-typedef struct trp_rb_node
-{
- struct trp_rb_node *rb_parent;
- struct trp_rb_node *rb_right;
- struct trp_rb_node *rb_left;
- key_compare key_compare_fn;
- trp_key_t key;
- trp_data_t data;
- unsigned int color;
-} trp_rb_node_t;
-
-typedef struct trp_rb_root
-{
- struct trp_rb_node *rb_node;
-} trp_rb_root_t;
-
-int trp_rb_insert (trp_key_t, trp_data_t, trp_rb_root_t *, key_compare);
-int trp_rb_insert_allow_same_key (trp_key_t, trp_data_t, trp_rb_root_t *,
- key_compare);
-void trp_rb_erase (trp_key_t, trp_rb_root_t *, key_compare key_compare_fn);
-void trp_rb_erase_with_data (trp_key_t key, trp_data_t data,
- trp_rb_root_t * root, int count,
- key_compare key_compare_fn);
-
-static inline trp_rb_node_t *
-trp_rb_search (trp_key_t key, trp_rb_root_t * root,
- key_compare key_compare_fn)
-{
- trp_rb_node_t *node = root->rb_node;
- int ret;
- while (node)
- {
- ret = key_compare_fn (node->key, key);
- if (0 < ret)
- {
- node = node->rb_left;
- }
- else if (0 > ret)
- {
- node = node->rb_right;
- }
- else
- {
- return node;
- }
- }
-
- return NULL;
-}
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/ipv4/stackx/spl_ip_addr.h b/stacks/lwip_stack/lwip_src/include/ipv4/stackx/spl_ip_addr.h
deleted file mode 100644
index ae5c31f..0000000
--- a/stacks/lwip_stack/lwip_src/include/ipv4/stackx/spl_ip_addr.h
+++ /dev/null
@@ -1,162 +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.
-*/
-
-#ifndef __LWIP_IP_ADDR_H__
-#define __LWIP_IP_ADDR_H__
-
-#include "spl_opt.h"
-#include "spl_def.h"
-#include "ip_module_api.h"
-#include "stackx_ip_addr.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/** ip_addr_t uses a struct for convenience only, so that the same defines can
- * operate both on ip_addr_t as well as on ip_addr_p_t. */
-/* Forward declaration to not include netif.h */
-struct netif;
-#if BYTE_ORDER == BIG_ENDIAN
-
-/** Set an IPaddress given by the four byte-parts */
-#define SPL_IP4_ADDR(ipaddr, a, b, c, d) \
- (ipaddr)->addr = ((u32_t)((a) & 0xff) << 24) | \
- ((u32_t)((b) & 0xff) << 16) | \
- ((u32_t)((c) & 0xff) << 8) | \
- (u32_t)((d) & 0xff)
-#else
-
-/** Set an IPaddress given by the four byte-parts.
- Little-endian version that prevents the use of htonl. */
-#define SPL_IP4_ADDR(ipaddr, a, b, c, d) \
- (ipaddr)->addr = ((u32_t)((d) & 0xff) << 24) | \
- ((u32_t)((c) & 0xff) << 16) | \
- ((u32_t)((b) & 0xff) << 8) | \
- (u32_t)((a) & 0xff)
-#endif
-
-/** memcpy-like copying of IPaddresses where addresses are known to be
- * 16-bit-aligned if the port is correctly configured (so a port could define
- * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */
-#ifndef IPADDR2_COPY
-#define IPADDR2_COPY(dest, src) MEMCPY_S(dest, sizeof(ip_addr_t), src, sizeof(ip_addr_t))
-#endif
-
-/** Copy IPaddress - faster than spl_ip_addr_set: no NULL check */
-#define spl_ip_addr_copy(dest, src) ((dest).addr = (src).addr)
-
-/** Safely copy one IPaddress to another (src may be NULL) */
-#define spl_ip_addr_set(dest, src) ((dest)->addr = \
- ((src) == NULL ? 0 : \
- (src)->addr))
-
-/** Safely copy one IPaddress to another and change byte order
- * from host- to network-order. */
-#define spl_ip_addr_set_hton(dest, src) ((dest)->addr = \
- ((src) == NULL ? 0 : \
- htonl((src)->addr)))
-
-/** Get the network address by combining host address with netmask */
-#define spl_ip_addr_get_network(target, host, netmask) ((target)->addr = ((host)->addr) & ((netmask)->addr))
-
-/**
- * Determine if two address are on the same network.
- *
- * @arg addr1 IPaddress 1
- * @arg addr2 IPaddress 2
- * @arg mask network identifier mask
- * @return !0 if the network identifiers of both address match
- */
-#define spl_ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
- (mask)->addr) == \
- ((addr2)->addr & \
- (mask)->addr))
-
-/* && ((dest)->addr & tmp->netmask.addr) == (tmp->ip_addr.addr & tmp->netmask.addr) */
-/* add "netif = netif->root; \"*/
-#define ip_net_netif_cmp( dest, netif) ({ \
- netif = netif->root; \
- struct netif* tmp = netif; \
- int find = 0; \
- while(tmp) \
- { \
- if (is_in_same_network((dest)->addr, tmp->ip_addr.addr)) \
- { \
- netif->ip_addr.addr = tmp->ip_addr.addr; \
- netif->netmask.addr = tmp->netmask.addr; \
- find = 1; \
- break; \
- } \
- if (netif->is_out) \
- { \
- break; \
- } \
- tmp = tmp->vnext; \
- } \
- (!!find); \
- })
-
-/* Check if netif match dest , if not , find one and swap */
-/* add "netif = netif->root; \"*/
-
-#define ip_addr_netif_cmp_and_swap( dest, pnetif) ({ \
- pnetif = pnetif->root; \
- struct netif* tmp = pnetif; \
- int find = 0; \
- while(tmp) \
- { \
- if ((dest)->addr == tmp->ip_addr.addr) \
- { \
- pnetif->ip_addr.addr = tmp->ip_addr.addr; \
- pnetif->netmask.addr = tmp->netmask.addr; \
- find = 1; \
- break; \
- } \
- if (pnetif->is_out) \
- { \
- break; \
- } \
- tmp = tmp->vnext; \
- } \
- (!!find); \
- })
-
-#define ip_addr_netif_cmp( dest, pnetif) ({ \
- pnetif = pnetif->root; \
- struct netif* tmp = pnetif; \
- int find = 0; \
- while(tmp) \
- { \
- if ((dest)->addr == tmp->ip_addr.addr) \
- { \
- find = 1; \
- break; \
- } \
- tmp = tmp->vnext; \
- } \
- (!!find); \
- })
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_IP_ADDR_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/netif/common.h b/stacks/lwip_stack/lwip_src/include/netif/common.h
deleted file mode 100644
index 45e9c8f..0000000
--- a/stacks/lwip_stack/lwip_src/include/netif/common.h
+++ /dev/null
@@ -1,233 +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.
-*/
-
-#ifndef _COMMON_H_
-#define _COMMON_H_
-#include <stddef.h> /* for size_t */
-#include "stackx_common.h"
-#include "netif.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-//yyq
-
-/* define common names for structures shared between server and client */
-
-#define MP_STACKX_INSTANCE_POLL_NAME "VppTCP_instance_poll"
-#define MP_STACKX_PORT_ZONE "VppTCP_stackx_port_zone"
-#define MP_STACKX_PORT_INFO "VppTCP_stackx_port_info"
-#define MP_MEMPOLL_RX_NAME "VppTCP_MBUF_%u_%u_RX"
-#define MP_MEMPOLL_RXMSG_NAME "VppTCP_MSG_%u_%u_RX"
-#define MP_MEMPOLL_TX_NAME "VppTCP_MBUF_TX"
-#define MP_MEMPOLL_SEG_NAME "VppTCP_MBUF_SEG"
-#define MP_STACKX_MSG_NAME "VppTCP_msg"
-#define MP_STACKX_RING_NAME "VppTCP_%u_ring"
-#define MP_STACKX_LRING_NAME "VppTCP_%u_lring"
-
-#define MP_STACKX_BIT_SET_NAME "%s_bit_set"
-
-#define MP_STACKX_SOCKET_FREE_LIST_NAME "VppTCP_socket_list"
-
-#define MP_NETIF_LIST_NAME "VppTCP_Netif_list"
-
-/*
- move sharemem create from App to nstackMain
-advice rename app_tx_mbuf to VppTCP_APP_TXBUF_POOL
-*/
-#define MP_STACKX_APP_TXBUF_POOL "app_tx_mbuf"
-
-#define MP_MEMPOLL_TCP_BUFF_NAME "VppTCP_MBUF_%u_TCP_BUFF"
-
-extern int spl_snprintf (char *buffer, int buflen, const char *format, ...);
-
-/*According to the number of network cards, the establishment of recv lring,
- *each separate, each proc_id each NIC queue independent lring
- */
-static inline const char *
-get_mempoll_rx_name (unsigned proc_id, unsigned nic_id)
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety)
- * the id may reach 65535, need add more space*/
- static char buffer[sizeof (MP_MEMPOLL_RX_NAME) + 32];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, MP_MEMPOLL_RX_NAME, proc_id, nic_id); //???????????buffer??
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_rxmsg_name (unsigned proc_id, unsigned nic_id)
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety)
- * the id may reach 65535, need add more space*/
- static char buffer[sizeof (MP_MEMPOLL_RXMSG_NAME) + 32];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, MP_MEMPOLL_RXMSG_NAME, proc_id, nic_id); //???????????buffer??
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_ring_name (unsigned proc_id)
-{
- static char buffer[sizeof (MP_STACKX_RING_NAME) + 16];
-
- int retVal =
- spl_snprintf (buffer, sizeof (buffer) - 1, MP_STACKX_RING_NAME, proc_id);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_lring_name (unsigned proc_id)
-{
- static char buffer[sizeof (MP_STACKX_LRING_NAME) + 16];
-
- int retVal =
- spl_snprintf (buffer, sizeof (buffer) - 1, MP_STACKX_LRING_NAME, proc_id);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_msg_name ()
-{
- static char buffer[sizeof (MP_STACKX_MSG_NAME) + 16];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, MP_STACKX_MSG_NAME);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_tx_name ()
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety) */
- static char buffer[sizeof (MP_MEMPOLL_TX_NAME) + 16];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, MP_MEMPOLL_TX_NAME); //???????????buffer??
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_mempoll_seg_name ()
-{
- /* buffer for return value. Size calculated by %u being replaced
- * by maximum 3 digits (plus an extra byte for safety) */
- static char buffer[sizeof (MP_MEMPOLL_SEG_NAME) + 16];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, MP_MEMPOLL_SEG_NAME); //???????????buffer??
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_memStatusBitSet_name (const char *name, unsigned int num)
-{
- static char buffer[64];
-
- int retVal =
- spl_snprintf (buffer, sizeof (buffer) - 1, MP_STACKX_BIT_SET_NAME "%d",
- name, num);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_memNameWithProc (const char *name)
-{
- static char buffer[64];
-
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, "%s", name);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-static inline const char *
-get_memInstancePoll_name (unsigned int type)
-{
- static char buffer[sizeof (MP_STACKX_INSTANCE_POLL_NAME) + 32];
- int retVal = spl_snprintf (buffer, sizeof (buffer) - 1, "%s" "%d",
- MP_STACKX_INSTANCE_POLL_NAME, type);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("spl_snprintf failed]");
- return NULL;
- }
-
- return buffer;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/include/netif/kni_proc.h b/stacks/lwip_stack/lwip_src/include/netif/kni_proc.h
deleted file mode 100644
index bcf4129..0000000
--- a/stacks/lwip_stack/lwip_src/include/netif/kni_proc.h
+++ /dev/null
@@ -1,103 +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.
-*/
-
-#ifndef _KNI_PROC_H_
-#define _KNI_PROC_H_
-#include <rte_kni.h>
-#include <rte_mempool.h>
-#include <rte_mbuf.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define KNI_MAX_KTHREAD 32
-
-/* the kni is runned on the lcore from below on */
-#define DEFAULT_KNI_LCORE_BASE 24
-
-/* Structure of kni para */
-struct disp_kni_para
-{
- u8_t queue_id;
- u8_t port_id;
-};
-
-/*
- * Structure of port parameters
- */
-struct kni_port_params
-{
- uint8_t port_id; /* Port ID */
- unsigned lcore_rx; /* lcore ID for RX */
- unsigned lcore_tx; /* lcore ID for TX */
- uint32_t nb_lcore_k; /* Number of lcores for KNI multi kernel threads */
- uint32_t nb_kni; /* Number of KNI devices to be created */
- unsigned lcore_k[KNI_MAX_KTHREAD]; /* lcore ID list for kthreads */
- struct rte_kni *kni[KNI_MAX_KTHREAD]; /* KNI context pointers */
- struct rte_mempool *kni_pktmbuf_pool;
- u8_t ip_reconfigured;
-} __rte_cache_aligned;
-
-/* Structure type for storing kni interface specific stats */
-struct kni_interface_stats
-{
- /* number of pkts received from NIC, and sent to KNI */
- uint64_t rx_packets;
-
- /* number of pkts received from NIC, but failed to send to KNI */
- uint64_t rx_dropped;
-
- /* number of pkts received from KNI, and sent to NIC */
- uint64_t tx_packets;
-
- /* number of pkts received from KNI, but failed to send to NIC */
- uint64_t tx_dropped;
-};
-
-/* External interface for initilizing KNI subsystem */
-int kni_proc_init (enum rte_proc_type_t proc_type, int proc_id, u32_t pmask,
- struct kni_port_params **kni_para);
-
-int kni_proc_init_secondary (int proc_id, int port_id);
-/* External interface for destroy KNI subsystem */
-void kni_proc_free (void);
-
-/* External interface for kni tx thread entry */
-void kni_tx_thread_cycle (void *arg);
-
-int kni_config_net (void);
-void kni_handler_eth_operate_request (int port);
-
-/* External interface for commiting packet to kni device */
-void kni_dispatch_to_kernel (uint8_t port_id,
- struct rte_mbuf *pkts_burst[], uint8_t nb_rx);
-
-/* the lcore kni tx/rx thread run on */
-unsigned kni_get_tx_lcore (uint8_t port_id);
-unsigned kni_get_rx_lcore (uint8_t port_id);
-
-void init_kni (void);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /*#ifndef _KNI_PROC_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/netif/sc_dpdk.h b/stacks/lwip_stack/lwip_src/include/netif/sc_dpdk.h
deleted file mode 100644
index 99c3bc6..0000000
--- a/stacks/lwip_stack/lwip_src/include/netif/sc_dpdk.h
+++ /dev/null
@@ -1,80 +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.
-*/
-
-#ifndef SC_DPDK_H_
-#define SC_DPDK_H_
-
-#include <pbuf.h>
-#include <sharedmemory.h>
-
-#include "lwip/etharp.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define NSTACK_CONFIG_SHM "nstack_config"
-
-#define MBUF_DATA_SIZE 2048
-#define MBUF_SIZE (MBUF_DATA_SIZE + sizeof(struct common_mem_mbuf) + COMMON_PKTMBUF_HEADROOM)
-
-extern int g_nstack_bind_cpu;
-
-inline uint16_t spl_mbuf_refcnt_update (void *mbuf, int16_t value);
-struct stack_proc_content *get_stack_proc_content ();
-
-inline int spl_msg_malloc (data_com_msg ** p_msg_entry);
-#define spl_msg_free(p_msg_entry) msg_free(p_msg_entry)
-struct spl_pbuf *spl_mbuf_malloc (uint16_t len, spl_pbuf_type type,
- u16_t * count);
-
-inline void spl_mbuf_free (void *mbuf);
-
-inline int spl_set_lcore_id (unsigned dest_lcore_id);
-
-static inline unsigned
-spl_get_lcore_id ()
-{
- unsigned core_id = 0;
-
-#if (DPDK_MODULE != 1)
-#ifdef HAL_LIB
-#else
- core_id = rte_lcore_id ();
-#endif
- if (core_id >= MAX_THREAD_NUM)
- {
- core_id = 0;
- }
-#endif
-
- return core_id;
-}
-
-int set_share_config ();
-
-int init_instance ();
-
-void printmeminfo ();
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-#endif /* SERVER_DPDK_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/netif/sharedmemory.h b/stacks/lwip_stack/lwip_src/include/netif/sharedmemory.h
deleted file mode 100644
index 6230ed8..0000000
--- a/stacks/lwip_stack/lwip_src/include/netif/sharedmemory.h
+++ /dev/null
@@ -1,149 +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.
-*/
-
-#ifndef SHAREDMEMORY_H_
-#define SHAREDMEMORY_H_
-#include "stackxopts.h"
-#include <sys/types.h>
-#include <semaphore.h>
-//#include "stackx/raw.h"
-#include "tcp.h"
-#include "udp.h"
-//#include "stackx/ip.h"
-#include "spl_err.h"
-#include "list.h"
-#include "arch/queue.h"
-#include "spl_opt.h"
-#include "stackx/spl_ip_addr.h"
-
-#include "stackx/spl_api.h"
-#include <arch/sys_arch.h>
-#include "common_mem_api.h"
-//#include "stackx/memp.h"
-#include "stackx_instance.h"
-
-#include "hal_api.h"
-#ifdef HAL_LIB
-#else
-#include "rte_ring.h"
-#endif
-
-/** Description for a task waiting in select */
-struct stackx_select_cb
-{
- /** Pointer to the next waiting task */
- union
- {
- struct stackx_select_cb *next;
- PTR_ALIGN_TYPE next_a;
- };
-
- /** Pointer to the previous waiting task */
- union
- {
- struct stackx_select_cb *prev;
- PTR_ALIGN_TYPE prev_a;
- };
-
- /** semaphore to wake up a task waiting for select */
- //sys_sem_t sem;
- union
- {
- sys_sem_t_v1 sem;
- PTR_ALIGN_TYPE sem_a;
- };
-
- /** readset passed to select */
- fd_set readset;
-
- /** writeset passed to select */
- fd_set writeset;
-
- /** unimplemented: exceptset passed to select */
- fd_set exceptset;
-
- /** don't signal the same semaphore twice: set to 1 when signalled */
- volatile int sem_signalled;
-
- uint8_t pad_64bit[4];
-};
-/** From epoll.h: Definition of struct stackx_sock and stackx_select_cb ---------End*/
-
-enum tcp_run_type
-{
- TCP_MUTIPL_INSTANCE = 0,
- TCP_MASTER_WORKER,
- TCP_DISTRIBUTOR_WORKER,
- TCP_RUN_TO_COMPETE,
- TCP_PROC_TYPE_END
-};
-
-enum proc_run_type
-{
- PROC_MAIN_RUN_TYPE = 0,
- PROC_BACKUP_RUN_TYPE,
- PROC_RUN_TYPE_END
-};
-
-struct linux_port_info
-{
- char if_name[HAL_MAX_NIC_NAME_LEN];
- char if_type[HAL_MAX_NIC_NAME_LEN];
- char ip_addr_linux[18]; //uint32_t ip_addr_linux;
- char mask_linux[18]; //uint32_t mask_linux;
- char bcast_linux[18]; //uint32_t bcast_linux;
- char mac_addr[20]; //struct ether_addr mac_addr;
- hal_hdl_t hdl;
-};
-
-struct stackx_port_info
-{
- struct stackx_port_info *next_use_port;
- struct linux_port_info linux_ip;
-};
-
-struct stackx_port_zone
-{
- unsigned int port_num;
- unsigned int bonded_port_num;
- struct stackx_port_info *stackx_one_port;
-};
-
-struct select_cb_entry
-{
- struct stackx_select_cb select_cb;
-
- union
- {
- sem_t semForSelect;
- ALIGN_TYPE pad_64bit[4];
- };
-
- union
- {
- struct select_cb_entry *pre_empty_entry;
- PTR_ALIGN_TYPE pre_empty_entry_a;
- };
-
- union
- {
- struct select_cb_entry *next_empty_entry;
- PTR_ALIGN_TYPE next_empty_entry_a;
- };
-
-};
-
-#endif /* SHAREDMEMORY_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/netif/spl_hal.h b/stacks/lwip_stack/lwip_src/include/netif/spl_hal.h
deleted file mode 100644
index ca56663..0000000
--- a/stacks/lwip_stack/lwip_src/include/netif/spl_hal.h
+++ /dev/null
@@ -1,114 +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.
-*/
-
-#ifndef SPL_HAL_H_
-#define SPL_HAL_H_
-
-#include "hal_api.h"
-#include "netif.h"
-#include "nsfw_maintain_api.h"
-#include "stackx_spl_share.h"
-#include "stackx_pbuf_comm.h"
-#include "netifapi.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-int spl_hal_init (int argc, char *argv[]);
-int spl_hal_port_init ();
-
-int spl_hal_stats_display (struct netif *pnetif, char *str, u32_t len,
- char *json, u32_t json_len);
-
-err_t spl_hal_output (struct netif *netif, struct pbuf *buf);
-void spl_hal_input (struct netif *netif, struct spl_pbuf **buf);
-
-inline u16_t spl_hal_recv (struct netif *netif, u8_t id);
-
-int spl_hal_tx_ip_cksum_enable ();
-int spl_hal_tx_udp_cksum_enable ();
-int spl_hal_tx_tcp_cksum_enable ();
-
-u32 spl_hal_is_nic_exist (const char *name);
-
-int spl_hal_is_bond_netif (struct netif *pnetif);
-
-static inline void
-spl_do_dump (struct spl_pbuf *p, u16 direction)
-{
- struct spl_pbuf *q = p;
- while (q)
- {
- ntcpdump (q->payload, q->len, direction);
- q = q->next;
- }
-}
-
-/* information of bond*/
-#define MAX_BOND_PORT_NUM 4
-
-/* information of one bond port */
-struct bond_set
-{
- char bond_port_name[HAL_MAX_NIC_NAME_LEN];
- char slave_ports[HAL_MAX_SLAVES_PER_BOND][HAL_MAX_NIC_NAME_LEN];
- u8_t slave_port_cnt;
-};
-
-#define NETIF_ETH_ADDR_LEN 6
-
-/* information of all bond ports */
-struct bond_ports_info
-{
- u8_t cnt;
- struct bond_set ports[MAX_BOND_PORT_NUM];
-};
-
-struct ether_addr
-{
- u8_t addr_bytes[NETIF_ETH_ADDR_LEN];
-
-};
-
-struct netif *get_netif_by_ip (unsigned int ip);
-struct netif *netif_check_broadcast_addr (spl_ip_addr_t * addr);
-struct netifExt *getNetifExt (u16_t id);
-int netifExt_add (struct netif *netif);
-
-int add_netif_ip (char *netif_name, unsigned int ip, unsigned int mask);
-int del_netif_ip (char *netif_name, unsigned int ip);
-
-err_t spl_netifapi_netif_add (struct netif *pnetif,
- spl_ip_addr_t * ipaddr,
- spl_ip_addr_t * netmask,
- spl_ip_addr_t * gw,
- void *state,
- netif_init_fn init,
- netif_input_fn input,
- netifapi_void_fn voidfunc);
-struct netif *find_netif_by_if_name (char *if_name);
-void ethernetif_packets_input (struct netif *pstnetif);
-err_t ethernetif_init (struct netif *pnetif);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-#endif /* SPL_HAL_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/internal_msg.h b/stacks/lwip_stack/lwip_src/include/stackx/internal_msg.h
deleted file mode 100644
index 584ab06..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/internal_msg.h
+++ /dev/null
@@ -1,90 +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.
-*/
-
-#ifndef __internal_msg_h__
-#define __internal_msg_h__
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#include "nsfw_msg.h"
-#include "netif.h"
-#include "lwip/netifapi.h"
-#include "ip_module_api.h"
-
-enum netif_msg_type
-{
- NETIF_DO_ADD,
- NETIF_MSG_API_MAX = MAX_MINOR_TYPE
-};
-
-/* NETIF_DO_ADD */
-typedef struct msg_add_netif_T
-{
- void (*function) (struct msg_add_netif_T * m);
- struct netif *netif;
- spl_ip_addr_t *ipaddr;
- spl_ip_addr_t *netmask;
- spl_ip_addr_t *gw;
- void *state;
- netif_init_fn init;
- netif_input_fn input;
- netifapi_void_fn voidfunc;
- /* no need to extend member */
-} msg_add_netif;
-
-typedef struct
-{
- ip_module_type type;
- ip_module_operate_type operate_type;
- void *arg;
-} msg_ip_module;
-
-typedef struct msg_internal_callback_T
-{
- void (*function) (void *ctx);
- void *ctx;
-} msg_internal_callback;
-
-enum timer_msg_type
-{
- TIMER_MSG_TIMEOUT,
- TIMER_MSG_CLEAR,
- TIMER_MSG_MAX = MAX_MINOR_TYPE
-};
-
-typedef struct msg_timer_T
-{
- void *act;
- void *arg;
-} msg_timer;
-
-enum mt_msg_type
-{
- MT_MSG_VER_MGR,
- MT_MSG_MAX = MAX_MINOR_TYPE
-};
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __internal_msg_h__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_api.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_api.h
deleted file mode 100644
index ea63e90..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_api.h
+++ /dev/null
@@ -1,276 +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.
-*/
-
-#ifndef __SPL_API_H__
-#define __SPL_API_H__
-
-#include "opt.h"
-#include "common_mem_base_type.h"
-#include <stddef.h> /* for size_t */
-#include "arch/queue.h"
-#include "arch/sys_arch.h"
-#include "arch/atomic_32.h"
-#include "stackx_common_opt.h"
-#include "stackx_spl_share.h"
-
-/* From lwip */
-#include "api.h"
-#include "sys.h"
-#include "sys_arch.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define MAX_WAIT_TIMEOUT 0x7FFFFFFF
-
-/* Throughout this file, IPaddresses and port numbers are expected to be in
- * the same byte order as in the corresponding pcb.
- */
-
-/* Flags for struct netconn.flags (u8_t) */
-
-/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
- this temporarily stores whether to wake up the original application task
- if data couldn't be sent in the first try. */
-#define SPL_NETCONN_FLAG_WRITE_DELAYED 0x01
-
-/** Should this netconn avoid blocking? */
-#define SPL_NETCONN_FLAG_NON_BLOCKING 0x02
-
-/** Was the last connect action a non-blocking one? */
-#define SPL_NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04
-
-/** If this is set, a TCP netconn must call netconn_recved() to update
- the TCP receive window (done automatically if not set). */
-#define SPL_NETCONN_FLAG_NO_AUTO_RECVED 0x08
-
-/** If a nonblocking write has been rejected before, poll_tcp needs to
- check if the netconn is writable again */
-// #define NETCONN_FLAG_CHECK_WRITESPACE 0x10
-
-enum stackx_model
-{
- SOCKET_STACKX = 0,
- CALLBACK_STACKX
-};
-
-enum callback_type
-{
- API_ACCEPT_EVENT = 0xF0,
- API_RECV_EVENT,
- API_SEND_EVENT,
- API_CLOSE_EVENT
-};
-#if 1
-/** Use to inform the callback function about changes */
-enum spl_netconn_evt
-{
- SPL_NETCONN_EVT_RCVPLUS,
- SPL_NETCONN_EVT_RCVMINUS,
- SPL_NETCONN_EVT_SENDPLUS,
- SPL_NETCONN_EVT_SENDMINUS,
- SPL_NETCONN_EVT_ERROR,
- SPL_NETCONN_EVT_HUP,
- SPL_NETCONN_EVT_RDHUP,
- SPL_NETCONN_EVT_AGAIN,
- SPL_NETCONN_EVT_ACCEPT
-};
-#endif
-enum
-{
- INET_ECN_NOT_ECT = 0,
- INET_ECN_ECT_1 = 1,
- INET_ECN_ECT_0 = 2,
- INET_ECN_CE = 3,
- INET_ECN_MASK = 3,
-};
-
-#define SPL_NETCONNTYPE_GROUP(t) (t & 0xF0)
-#define SPL_NETCONNTYPE_DATAGRAM(t) (t & 0xE0)
-
-/* forward-declare some structs to avoid to include their headers */
-typedef struct common_pcb
-{
- enum stackx_model model;
-
- int socket;
-
- /** type of the netconn (TCP, UDP or RAW) */
- enum spl_netconn_type type;
-
- /* share memory between sbr and stackx */
- spl_netconn_t *conn;
-
- u16 bind_thread_index;
- u8 close_progress;
- u8 recv_ring_not_empty;
-
- /** TCP: when data passed to netconn_write doesn't fit into the send buffer,
- this temporarily stores the message.
- Also used during connect and close.
- */
- data_com_msg *current_msg;
-
- msg_write_buf *msg_head;
- msg_write_buf *msg_tail;
-
- size_t write_offset;
-
- /** timeout to wait for new data to be received
- (or connections to arrive for listening netconns) */
- int recv_timeout;
-
- /* timeout to wait for send buffer writtable */
- int send_timeout;
-
- int sk_rcvlowat;
-
- //DFX stat for connection packet
- /* dfx_conn_t dfx; */
-
- /*store the hostpid info for release */
- uint32_t hostpid;
- u8_t l4_tick; /* if is odd number, use l4 ring first */
- u8_t dataSentFlag;
-
- nsfw_res res_chk;
-} common_pcb;
-
-/** A callback prototype to inform about events for a netconn */
-//typedef void (*netconn_callback)(struct spl_netconn *, enum netconn_evt, u16_t len);
-
-/* Though these callback pointers are not set and referenced in nStack Core, still
-the padding is required since the structure will be used in netconn and it needs
-padding across 32-bit and 64-bit architecture */
-typedef struct
-{
- union
- {
- int (*accept_event) (struct spl_netconn * conn);
- PTR_ALIGN_TYPE accept_event_a;
- };
-
- union
- {
- int (*recv_event) (struct spl_netconn * conn);
- PTR_ALIGN_TYPE recv_event_a;
- };
- union
- {
- int (*send_event) (struct spl_netconn * conn);
- PTR_ALIGN_TYPE send_event_a;
- };
- union
- {
- int (*close_event) (struct spl_netconn * conn);
- PTR_ALIGN_TYPE close_event_a;
- };
-} callback_funcation;
-
-union ring_addr_u
-{
- void *ring_addr;
- PTR_ALIGN_TYPE ring_addr_a;
-};
-
-struct mem_manage
-{
- volatile uint32_t current_read;
- volatile uint32_t current_write;
- union ring_addr_u ring_addr[RECV_MAX_POOL];
- union ring_addr_u l4_ring; /* recv ring for l4 */
- //void *ring_addr[RECV_MAX_POOL];
-};
-
-/* Pbuf free should be done in network stack */
-struct spl_netconn_recvbuf_recoder
-{
- struct spl_pbuf *head;
- struct spl_pbuf *tail;
- int totalLen;
-};
-
-/** Register an Network connection event */
-void spl_event_callback (spl_netconn_t * conn, enum spl_netconn_evt evt,
- int postFlag);
-
-#define SPL_API_EVENT(c, e, p) spl_event_callback(c, e, p)
-
-/** Set conn->last_err to err but don't overwrite fatal errors */
-#define SPL_NETCONN_SET_SAFE_ERR(conn, err) do { \
- SYS_ARCH_PROTECT(lev); \
- if (!ERR_IS_FATAL((conn)->last_err)) { \
- (conn)->last_err = err; \
- } \
- SYS_ARCH_UNPROTECT(lev); \
- } while (0);
-
-/** Set the blocking status of netconn calls (@todo: write/send is missing) */
-#define spl_netconn_set_nonblocking(conn, val) do { if (val) { \
- (conn)->flags |= SPL_NETCONN_FLAG_NON_BLOCKING; \
- } else { \
- (conn)->flags &= ~SPL_NETCONN_FLAG_NON_BLOCKING; }} while (0)
-
-/** Get the blocking status of netconn calls (@todo: write/send is missing) */
-#define spl_netconn_is_nonblocking(conn) (((conn)->flags & SPL_NETCONN_FLAG_NON_BLOCKING) != 0)
-
-/** TCP: Set the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */
-#define spl_netconn_set_noautorecved(conn, val) do { if (val) { \
- (conn)->flags |= SPL_NETCONN_FLAG_NO_AUTO_RECVED; \
- } else { \
- (conn)->flags &= ~SPL_NETCONN_FLAG_NO_AUTO_RECVED; }} while (0)
-
-/** TCP: Get the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */
-#define spl_netconn_get_noautorecved(conn) (((conn)->flags & SPL_NETCONN_FLAG_NO_AUTO_RECVED) != 0)
-
-/** Set the receive timeout in milliseconds */
-#define spl_netconn_set_recvtimeout(cpcb, timeout) ((cpcb)->recv_timeout = (timeout))
-
-/** Get the receive timeout in milliseconds */
-#define spl_netconn_get_recvtimeout(cpcb) ((cpcb)->recv_timeout)
-
-/** Set the send timeout in milliseconds */
-#define spl_netconn_set_sendtimeout(cpcb, timeout) ((cpcb)->send_timeout = (timeout))
-
-/** Get the send timeout in milliseconds */
-#define spl_netconn_get_sendtimeout(cpcb) ((cpcb)->send_timeout)
-
-#define spl_netconn_set_sendbufsize(conn, sendbufsize) ((conn)->send_bufsize = (sendbufsize))
-
-/* "man 7 socket" information
- SO_SNDBUF
- Sets or _gets the maximum socket send buffer in bytes. The kernel doubles
- this value (to allow space for bookkeeping overhead) when it is set using
- setsockopt(2), and this doubled value is returned by getsockopt(2).
-*/
-#define spl_netconn_get_sendbufsize(conn) (2 *((conn)->send_bufsize))
-
-#define spl_netconn_set_reclowbufsize(cpcb, recvlowbufsize) ((cpcb)->sk_rcvlowat = ((recvlowbufsize) > 0) ? recvlowbufsize : 1)
-#define spl_netconn_get_reclowbufsize(cpcb) ((cpcb)->sk_rcvlowat)
-
-extern int spl_post_msg (u16 mod, u16 maj, u16 min, u16 op, char *data,
- u16 data_len, u32 src_pid);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_API_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_api_msg.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_api_msg.h
deleted file mode 100644
index 94b681e..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_api_msg.h
+++ /dev/null
@@ -1,129 +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.
-*/
-
-#ifndef __LWIP_API_MSG_H__
-#define __LWIP_API_MSG_H__
-
-#include <stddef.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-
-#include "nsfw_msg.h"
-#include "spl_opt.h"
-#include "spl_ip_addr.h"
-#include "spl_err.h"
-#include "spl_api.h"
-//#include "sockets.h"
-#include "stackx_spl_share.h"
-#include "stackx_spl_msg.h"
-
-/* From lwip */
-#include "tcp.h"
-#include "udp.h"
-#include "sys.h"
-
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/* For the netconn API, these values are use as a bitmask! */
-#define NETCONN_SHUT_RD 1
-#define NETCONN_SHUT_WR 2
-#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR)
-
-struct callback_fn
-{
- tcp_sent_fn sent_fn;
- tcp_recv_fn recv_fn;
- tcp_connected_fn connected_fn;
- tcp_poll_fn poll_fn;
- tcp_err_fn err_fn;
- tcp_err_fn close_fn;
- tcp_accept_fn accept_fn;
-};
-
-#ifdef HAL_LIB
-#else
-typedef enum _mbuf_recyle_flg
-{
- MBUF_UNUSED = 0,
- MBUF_HLD_BY_APP = 1,
- MBUF_HLD_BY_SPL = 2,
-} mbuf_recycle_flg;
-#endif
-
-err_t sp_enqueue (struct common_pcb *cpcb, void *p);
-err_t accept_dequeue (spl_netconn_t * lconn, void **new_buf,
- u32_t timeout /*miliseconds */ );
-err_t accept_enqueue (spl_netconn_t * conn, void *p);
-void free_conn_by_spl (spl_netconn_t * conn);
-void unlink_pcb (struct common_pcb *cpcb);
-void do_try_delconn (void *close_data, u32 delay_sec);
-void do_delconn (struct common_pcb *cpcb, msg_delete_netconn * msg);
-void do_bind (struct common_pcb *cpcb, msg_bind * msg);
-void do_pbuf_free (struct spl_pbuf *buf);
-void do_connect (struct common_pcb *cpcb, msg_connect * msg);
-void do_listen (struct common_pcb *cpcb, msg_listen * msg);
-void do_send (struct common_pcb *cpcb, msg_send_buf * msg);
-void do_recv (struct common_pcb *cpcb, msg_recv_buf * msg);
-void do_write (struct common_pcb *cpcb, msg_write_buf * msg);
-void do_getaddr (struct common_pcb *cpcb, msg_getaddrname * msg);
-void do_close (struct common_pcb *cpcb, msg_close * msg);
-void do_getsockopt_internal (struct common_pcb *cpcb,
- msg_setgetsockopt * smsg);
-void do_setsockopt_internal (struct common_pcb *cpcb,
- msg_setgetsockopt * smsg);
-void do_getsockname (struct common_pcb *cpcb, msg_getaddrname * amsg);
-int netconn_drain (enum spl_netconn_type t, spl_netconn_t * conn);
-int spl_pcb_new (msg_new_netconn * m);
-void do_app_touch (msg_app_touch * smsg);
-int do_close_finished (struct common_pcb *cpcb, u8_t close_finished,
- u8_t shut, err_t err, int OpShutDown);
-err_t do_writemore (struct spl_netconn *conn);
-err_t do_close_internal (struct common_pcb *cpcb, int OpShutDown);
-
-u8 get_shut_op (data_com_msg * m);
-int ks_to_stk_opt (int opt);
-void update_tcp_state (spl_netconn_t * conn, enum tcp_state state);
-
-err_t spl_poll_tcp (void *arg, struct tcp_pcb *pcb);
-err_t spl_recv_tcp (void *arg, struct tcp_pcb *pcb, struct pbuf *p,
- err_t err);
-err_t spl_sent_tcp (void *arg, struct tcp_pcb *pcb, u16_t len);
-void spl_err_tcp (void *arg, err_t err);
-err_t spl_tcp_recv_null (void *arg, struct tcp_pcb *pcb, struct pbuf *p,
- err_t err);
-err_t spl_do_connected (void *arg, struct tcp_pcb *pcb, err_t err);
-err_t spl_accept_function (void *arg, struct tcp_pcb *newpcb, err_t err);
-
-struct common_pcb *alloc_common_pcb ();
-void free_common_pcb (struct common_pcb *cpcb);
-int common_pcb_init (struct common_pcb *cpcb);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_API_MSG_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_err.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_err.h
deleted file mode 100644
index a0188be..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_err.h
+++ /dev/null
@@ -1,40 +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.
-*/
-
-#ifndef __STACKX_ERR_H__
-#define __STACKX_ERR_H__
-
-#include "spl_opt.h"
-#include "lwip/arch.h"
-#include "stackx_err.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef s8_t err_t;
-
-/* Definitions for error constants. */
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_ERR_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_instance.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_instance.h
deleted file mode 100644
index 697c67d..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_instance.h
+++ /dev/null
@@ -1,30 +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.
-*/
-
-#ifndef _SPL_INSTANCE_H_
-#define _SPL_INSTANCE_H_
-#include "nsfw_msg_api.h"
-#include "stackx_instance.h"
-
-extern stackx_instance *p_def_stack_instance;
-
-int spl_process (data_com_msg * m);
-
-void add_disp_netif (struct netif *netif);
-void do_update_pcbstate ();
-void init_stackx_lwip ();
-
-#endif /* _SPL_INSTANCE_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_netbuf.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_netbuf.h
deleted file mode 100644
index cd2e1bf..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_netbuf.h
+++ /dev/null
@@ -1,52 +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.
-*/
-
-#ifndef __LWIP_NETBUF_H__
-#define __LWIP_NETBUF_H__
-
-#include "spl_opt.h"
-#include "spl_pbuf.h"
-#include "spl_ip_addr.h"
-#include "common_mem_base_type.h"
-#include "common_mem_pal.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_netbuf.h"
-#include <sys/uio.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <errno.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/** This spl_netbuf has dest-addr/port set */
-#define NETBUF_FLAG_DESTADDR 0x01
-
-/** This spl_netbuf includes a checksum */
-#define NETBUF_FLAG_CHKSUM 0x02
-
-void spl_netbuf_delete (struct spl_netbuf *buf);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_NETBUF_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h
deleted file mode 100644
index 79deace..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_pbuf.h
+++ /dev/null
@@ -1,176 +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.
-*/
-
-#ifndef __STACKX_PBUF_H__
-#define __STACKX_PBUF_H__
-
-#include "cc.h"
-
-#include "common_mem_base_type.h"
-#include "stackx_pbuf_comm.h"
-#include "common_mem_mbuf.h"
-
-#ifdef HAL_LIB
-#else
-#include "common_pal_bitwide_adjust.h"
-#endif
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-extern u16_t g_offSetArry[SPL_PBUF_MAX_LAYER];
-
-/** indicates this pbuf is loop buf .*/
-#define PBUF_FLAG_LOOPBUF 0x08U
-
-#define PBUF_SET_LOOP_FLAG(buf) ((buf)->flags |= PBUF_FLAG_LOOPBUF)
-#define PBUF_IS_LOOP_BUF(buf) ((buf)->flags & PBUF_FLAG_LOOPBUF)
-
-/*Add 1 parameter, the last one, indicating which dpdk_malloc
- *should be allocated from the pool; non-PBUF_ALLOC type regardless of this parameter*/
-struct spl_pbuf *spl_pbuf_alloc_hugepage (spl_pbuf_layer l, u16_t length,
- spl_pbuf_type type,
- u16_t thread_index, void *net_conn);
-struct pbuf *spl_convert_spl_pbuf_to_pbuf (struct spl_pbuf *p_from);
-err_t
-splpbuf_to_pbuf_transport_copy (struct pbuf *p_to, struct spl_pbuf *p_from);
-
-err_t pbuf_to_splpbuf_copy (struct spl_pbuf *p_to, struct pbuf *p_from);
-err_t splpbuf_to_pbuf_copy (struct pbuf *p_to, struct spl_pbuf *p_from);
-spl_pbuf_layer get_pbuf_layer_from_pbuf_payload (struct pbuf *buf);
-void print_pbuf_payload_info (struct pbuf *buf, bool send);
-
-static inline u8_t
-spl_pbuf_header (struct spl_pbuf *p, s16_t header_size_increment)
-{
- u8_t pbuf_ret;
- /* header max len is tcp len+ ip len: 0xf*4+PBUF_IP_HLEN */
- if (unlikely
- (((header_size_increment) < 0 && (-(header_size_increment)) > p->len)
- || (header_size_increment > 0
- && (header_size_increment) >= (0xf * 4 + SPL_PBUF_IP_HLEN))))
- {
- pbuf_ret = 1;
- }
- else
- {
- p->payload_a = p->payload_a - (header_size_increment);
- p->len += (header_size_increment);
- p->tot_len += (header_size_increment);
- pbuf_ret = 0;
- }
- return pbuf_ret;
-}
-
-void spl_pbuf_realloc (struct spl_pbuf *p, u32_t size);
-
-void spl_pbuf_cat (struct spl_pbuf *head, struct spl_pbuf *tail);
-void spl_pbuf_free (struct spl_pbuf *p);
-
-#define pbuf_free_safe(x)\
-{\
- spl_pbuf_free((x));\
- (x) = NULL;\
-}
-
-/**
- * Count number of pbufs in a chain
- *
- * @param p first pbuf of chain
- * @return the number of pbufs in a chain
- */
-static inline u16_t
-spl_pbuf_clen (struct spl_pbuf *p)
-{
- u16_t len = 0;
- while (p != NULL)
- {
- ++len;
- p = (struct spl_pbuf *) ADDR_SHTOL (p->next_a);
- }
- return len;
-}
-
-static inline u16_t
-mbuf_count (struct spl_pbuf *p)
-{
- u16_t count = 0;
- struct spl_pbuf *buf = p;
- struct common_mem_mbuf *mbuf;
- while (buf)
- {
- mbuf =
- (struct common_mem_mbuf *) ((char *) buf -
- sizeof (struct common_mem_mbuf));
- while (mbuf)
- {
- count++;
-#ifdef HAL_LIB
-#else
- mbuf = mbuf->next;
-#endif
- }
- buf = (struct spl_pbuf *) ADDR_SHTOL (buf->next_a); //buf->next;
- }
- return count;
-}
-
-static inline u16_t
-mbuf_count_in_one_pbuf (struct spl_pbuf *p)
-{
-
- u16_t cnt = 0;
- struct common_mem_mbuf *mbuf;
- if (NULL == p)
- {
- NSPOL_LOGERR ("Invalid param : p(null) !");
- return 0;
- }
-
- mbuf =
- (struct common_mem_mbuf *) ((char *) p - sizeof (struct common_mem_mbuf));
-
- /* no need to check mbuf itself */
-#ifdef HAL_LIB
-#else
- if (!mbuf->next)
-#endif
- return 1;
-
- while (mbuf)
- {
- ++cnt;
-#ifdef HAL_LIB
-#else
- mbuf = mbuf->next;
-#endif
- }
-
- return cnt;
-}
-
-inline int pbuf_internal_copy (struct spl_pbuf *dst, struct spl_pbuf *src);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_PBUF_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_sbr.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_sbr.h
deleted file mode 100644
index a4d6ccc..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_sbr.h
+++ /dev/null
@@ -1,33 +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.
-*/
-
-#ifndef _SPL_SBR_H_
-#define _SPL_SBR_H_
-#include "nsfw_msg_api.h"
-#include "tcp.h"
-#include "udp.h"
-//#include "stackx/raw.h"
-#define COMM_PRIVATE_PTR(m) \
- ((m->param.receiver) ? ((struct common_pcb *)m->param.comm_receiver) : 0)
-#define TCP_PRIVATE_PTR(m) \
- ((m->param.receiver) ? (*(struct tcp_pcb **)m->param.receiver) : 0)
-#define UDP_PRIVATE_PTR(m) \
- ((m->param.receiver) ? (*(struct udp_pcb **)m->param.receiver) : 0)
-/*#define RAW_PRIVATE_PTR(m) \
- ((m->param.receiver) ? (*(void *)m->param.receiver) : 0) */
-
-int spl_sbr_process (data_com_msg * m);
-#endif /* _SPL_SBR_H_ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_sockets.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_sockets.h
deleted file mode 100644
index 278bb02..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_sockets.h
+++ /dev/null
@@ -1,252 +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.
-*/
-
-#ifndef __STACKX_SOCKETS_H__
-#define __STACKX_SOCKETS_H__
-
-#include <errno.h>
-#include <stddef.h> /* for size_t */
-#include "arch/sys_arch.h"
-#include "sys/socket.h"
-#include <errno.h>
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#ifndef socklen_t
-#define socklen_t u32_t
-#endif
-
-#define SET_STACKP_ERRNO(err) (errno = (err)) //thread-local errno
-
-#ifndef set_errno
-#define set_errno(err) SET_STACKP_ERRNO(err)
-#endif
-
-#define sock_set_errno(sk, e) do { \
- (sk)->err = (e); \
- if ((sk)->err != 0) \
- set_errno((sk)->err); \
- } while (0)
-
-#ifndef __BITS_SOCKET_H
-/* Socket protocol types (TCP/UDP/RAW) */
-#define SOCK_STREAM 1
-#define SOCK_DGRAM 2
-#define SOCK_RAW 3
-/*
- * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c)
- */
-#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info storing */
-#define SO_REUSEADDR 0x0002
-#endif
-
-#define SO_DONTROUTE 5 //0x0010 /* Unimplemented: just use interface addresses */
-#define SO_BROADCAST 6 //0x0020 /* permit to send and to receive broad cast messages*/
-#define SO_KEEPALIVE 9 //0x0008 gaussdb /* keep connections alive */
-#define SO_OOBINLINE 10 //0x0100 /* Unimplemented: leave received OOB data in line */
-#define SO_LINGER 13 //0x0080 /* linger on close if data present */
-#define SO_REUSEPORT 15 /* Unimplemented: allow local address & port reuse */
-#define SO_ACCEPTCONN 30 //0x0002 /* socket has had listen() */
-#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */
-
-#define SO_DONTLINGER ((int)(~SO_LINGER))
-
-/*
- * Additional options, not kept in so_options.
- */
-#define SO_TYPE 3 /* get socket type */
-#define SO_ERROR 4
-#define SO_SNDBUF 7 /* send buffer size */
-#define SO_RCVBUF 8 /* receive buffer size */
-#define SO_NO_CHECK 11 /* don't create UDP checksum */
-#define SO_RCVLOWAT 18 /* receive low-water mark */
-#define SO_SNDLOWAT 19 /* send low-water mark */
-#define SO_RCVTIMEO 20 /* receive timeout */
-#define SO_SNDTIMEO 21 /* Unimplemented: send timeout */
-
-#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */
-
-/*
- * Level number for (get/set)sockopt() to apply to socket itself.
- */
-#define SOL_SOCKET 1 //0xfff
-
-#ifndef __BITS_SOCKET_H
-
-#define AF_UNSPEC 0
-#define PF_UNSPEC AF_UNSPEC
-#define AF_INET 2
-#define PF_INET AF_INET
-
-#define IPPROTO_TCP 6
-#define IPPROTO_UDP 17
-#define IPPROTO_UDPLITE 136
-
-#define IPPROTO_IP 0
-
-#define MSG_PEEK 0x02
-#define MSG_WAITALL 0x100
-#define MSG_OOB 0x01
-#define MSG_DONTWAIT 0x40
-#define MSG_MORE 0x8000
-#endif
-
-#define IP_TOS 1
-#define IP_TTL 2
-
-#define RCV_WND 0x21
-#define RCV_ANN_WND 0x22
-#define INIT_CWND 0x23
-#define THRESHOLD_FACTOR 0x24
-#define TMR_INTERVAL 0x25
-
-/*
- * Options and types for UDP multicast traffic handling
- */
-#ifndef __BITS_SOCKET_H
-#define IP_ADD_MEMBERSHIP 3
-#define IP_DROP_MEMBERSHIP 4
-#define IP_MULTICAST_TTL 5
-#define IP_MULTICAST_IF 6
-#define IP_MULTICAST_LOOP 7
-#endif
-
-/*
- * The Type of Service provides an indication of the abstract
- * parameters of the quality of service desired. These parameters are
- * to be used to guide the selection of the actual service parameters
- * when transmitting a datagram through a particular network. Several
- * networks offer service precedence, which somehow treats high
- * precedence traffic as more important than other traffic (generally
- * by accepting only traffic above a certain precedence at time of high
- * load). The major choice is a three way tradeoff between low-delay,
- * high-reliability, and high-throughput.
- * The use of the Delay, Throughput, and Reliability indications may
- * increase the cost (in some sense) of the service. In many networks
- * better performance for one of these parameters is coupled with worse
- * performance on another. Except for very unusual cases at most two
- * of these three indications should be set.
- */
-#define IPTOS_LOWCOST 0x02
-#define IPTOS_RELIABILITY 0x04
-#define IPTOS_THROUGHPUT 0x08
-#define IPTOS_LOWDELAY 0x10
-#define IPTOS_TOS_MASK 0x1E
-#define IPTOS_MINCOST IPTOS_LOWCOST
-#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
-
-/*
- * The Network Control precedence designation is intended to be used
- * within a network only. The actual use and control of that
- * designation is up to each network. The Internetwork Control
- * designation is intended for use by gateway control originators only.
- * If the actual use of these precedence designations is of concern to
- * a particular network, it is the responsibility of that network to
- * control the access to, and use of, those precedence designations.
- */
-#define IPTOS_PREC_ROUTINE 0x00
-#define IPTOS_PREC_PRIORITY 0x20
-#define IPTOS_PREC_IMMEDIATE 0x40
-#define IPTOS_PREC_FLASH 0x60
-#define IPTOS_PREC_FLASHOVERRIDE 0x80
-#define IPTOS_PREC_CRITIC_ECP 0xa0
-#define IPTOS_PREC_INTERNETCONTROL 0xc0
-#define IPTOS_PREC_MASK 0xe0
-#define IPTOS_PREC_NETCONTROL 0xe0
-#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
-
-#if !defined (FIONREAD) || !defined (FIONBIO)
-#define IOC_VOID 0x20000000UL /* no parameters */
-#define IOC_OUT 0x40000000UL /* copy out parameters */
-#define IOC_IN 0x80000000UL /* copy in parameters */
-#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */
-#define IOC_INOUT (IOC_IN | IOC_OUT) /* 0x20000000 distinguishes new & old ioctl's */
-
-#define _IO(x, y) (((x) << 8) | (y) |IOC_VOID )
-
-#define _IOR(x, y, t) (IOC_OUT | (((long)sizeof(t) & IOCPARM_MASK) << 16) | ((x) << 8) | (y))
-
-#define _IOW(x, y, t) (IOC_IN | (((long)sizeof(t) & IOCPARM_MASK) << 16) | ((x) << 8) | (y))
-#endif /* !defined(FIONREAD) || !defined(FIONBIO) */
-
-#ifndef FIONREAD
-#define FIONREAD _IOR('f', 127, unsigned long)
-#endif
-#ifndef FIONBIO
-#define FIONBIO _IOW('f', 126, unsigned long)
-#endif
-
-/*unimplemented */
-#ifndef SIOCSHIWAT
-#define SIOCSHIWAT _IOW('s', 0, unsigned long)
-#define SIOCGHIWAT _IOR('s', 1, unsigned long)
-#define SIOCSLOWAT _IOW('s', 2, unsigned long)
-#define SIOCGLOWAT _IOR('s', 3, unsigned long)
-#ifndef __BITS_SOCKET_H
-#define SIOCATMARK _IOR('s', 7, unsigned long)
-#endif
-#endif
-
-/* commands for fnctl */
-#ifndef F_GETFL
-#define F_GETFL 3
-#endif
-#ifndef F_SETFL
-#define F_SETFL 4
-#endif
-
-/* File status flags and file access modes for fnctl,
- these are bits in an int. */
-#ifndef O_NONBLOCK
-#define O_NONBLOCK 0X800 /* nonblocking I/O */
-#endif
-#ifndef O_NDELAY
-#define O_NDELAY O_NONBLOCK /* same as O_NONBLOCK, for compatibility */
-#endif
-
-#ifndef O_CLOEXEC
-#define O_CLOEXEC 0x80000 /* set close_on_exec */
-#endif
-#ifndef __BITS_SOCKET_H
-#define SOCK_CLOEXEC O_CLOEXEC
-#endif
-#ifndef FD_CLOEXEC
-#define FD_CLOEXEC 1
-#endif
-#ifndef SHUT_RD
-#define SHUT_RD 0
-#define SHUT_WR 1
-#define SHUT_RDWR 2
-#endif
-
-struct pollfd
-{
-
- int fd; /* file descriptor */
- short events; /* wait event */
- short revents; /* actual event happened */
-};
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_SOCKETS_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_tcpip.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_tcpip.h
deleted file mode 100644
index 0f885d6..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_tcpip.h
+++ /dev/null
@@ -1,80 +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.
-*/
-
-#ifndef __STACKX_TCPIP_H__
-#define __STACKX_TCPIP_H__
-
-#include "spl_opt.h"
-#include "stackx/spl_ip_addr.h"
-#include "tcp.h"
-
-#define USEAGE_LOW 60
-#define USEAGE_HIGHT 80
-#define USEAGE_INVALID 0xFF
-
-/*** Put into stackx_instance *********
-
-************************************/
-#include "stackx/spl_api_msg.h"
-#include "netifapi.h"
-#include "stackx/spl_pbuf.h"
-#include "stackx/spl_api.h"
-#include "sys.h"
-#include "netif.h"
-#include "ip_module_api.h"
-#include "internal_msg.h"
-#include "pbuf.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/** Function prototype for send timeout message */
-err_t ltt_apimsg (sys_timeout_handler h, void *arg);
-
-/** Function prototype for the init_done function passed to tcpip_init */
-typedef void (*tcpip_init_done_fn) (void *arg);
-
-/** Function prototype for functions passed to tcpip_callback() */
-typedef void (*tcpip_callback_fn) (void *ctx);
-
-int init_by_main_thread ();
-int init_by_tcpip_thread ();
-err_t spl_tcpip_input (struct pbuf *p, struct netif *inp);
-
-int post_ip_module_msg (void *arg, ip_module_type type,
- ip_module_operate_type operate_type);
-int process_ip_module_msg (void *arg, ip_module_type type,
- ip_module_operate_type operate_type);
-int init_new_network_configuration ();
-
-#if STACKX_NETIF_API
-err_t tcpip_netif_add (msg_add_netif * tmp);
-#endif /* STACKX_NETIF_API */
-
-err_t ltt_clearTmrmsg (void *pcb, void *arg);
-
-sys_mbox_t get_primary_box ();
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_TCPIP_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h
deleted file mode 100644
index 4809b2b..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h
+++ /dev/null
@@ -1,108 +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.
-*/
-
-#ifndef __SPL_TIMERS_H__
-#define __SPL_TIMERS_H__
-
-#include "opt.h"
-#include "common_mem_base_type.h"
-
-typedef void (*sys_timeout_handler) (void *arg);
-
-#include "rb_tree.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/** Function prototype for a timeout callback function. Register such a function
- * using sys_timeout().
- *
- * @param arg Additional argument to pass to the function - set up by sys_timeout()
- */
-
-/*
- * *************************************************************************
- * PTIMER defined 2013/3/15
- * *************************************************************************
- */
-#define PTIMER_DEFAULT 0x00 /* periodic mode */
-#define PTIMER_ONESHOT 0x01
-#define PTIMER_USER_DEF 0x02
-
-enum msg_type
-{
- SYS_PTIMEROUT_MSG,
- SYS_UNPTIMEROUT_MSG,
-};
-
-struct msg_context
-{
- unsigned long msec;
- union
- {
- sys_timeout_handler handle;
- } action;
-#define _act_category action.act_category
-#define _phandle action.handle
- u32_t flags; /* oneshot|user_def|... */
- void *ctx; /* pcb ptr */
-};
-
-struct ptimer_node
-{
- struct rb_node node;
- unsigned long abs_nsec;
- struct msg_context info;
- unsigned long state;
- u16_t index; /* store a lwip thread message box id */
-};
-
-struct ptimer_msg
-{
- enum msg_type msg_type;
- struct ptimer_node *node;
- struct ptimer_msg *next, *prev;
-};
-
-struct ptimer_base
-{
- struct rb_root active;
- struct rb_node *first; /* point the recently timeout */
- pthread_mutex_t lock;
- pthread_cond_t cond;
- struct ptimer_msg *head, *tail;
-};
-
-/*
- * *****************************************************
- * ptimer E-N-D
- * *****************************************************
- */
-void ptimer_thread (void *arg);
-void timeout_phandler (void *act, void *arg);
-void regedit_ptimer (enum msg_type type, sys_timeout_handler handler,
- struct ptimer_node *node);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __LWIP_TIMERS_H__ */
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/stackx_instance.h b/stacks/lwip_stack/lwip_src/include/stackx/stackx_instance.h
deleted file mode 100644
index 679d2ac..0000000
--- a/stacks/lwip_stack/lwip_src/include/stackx/stackx_instance.h
+++ /dev/null
@@ -1,91 +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.
-*/
-
-#ifndef __STACKX_INSTANCE_H__
-#define __STACKX_INSTANCE_H__
-
-#include "stackx/spl_tcpip.h"
-#include "netif.h"
-#include "lwip/ip4_frag.h"
-#include "stackx/spl_pbuf.h"
-#include "arch/sys_arch.h"
-#include "arch/queue.h"
-#include "stackx_tx_box.h"
-#include "nsfw_msg.h"
-#include "stackx_app_res.h"
-#include "ip_module_api.h"
-#include "tcp.h"
-#include "udp.h"
-
-#define PKT_BURST 32
-
-#define TASK_BURST 16
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define MAX_NETBUFS 1024*2 //define for C10M
-
-#define TOTAL_MSG_QUEUE_NUM (MSG_PRIO_QUEUE_NUM+1) /* three priority queue and one primary queue */
-
-struct stackx_stat
-{
- struct rti_queue primary_stat; //primary box stat
- u64_t extend_member_bit;
-};
-
-struct stackx_stack
-{
- struct queue primary_mbox;
- struct queue priority_mbox[MSG_PRIO_QUEUE_NUM]; //0-highest; 1-medium; 2-lowest
- //stackx_apis stackx_api;
-};
-
-struct disp_netif_list
-{
- struct disp_netif_list *next;
- struct netif *netif;
-};
-
-typedef struct stackx_instance
-{
- uint16_t rss_queue_id;
-
- mpool_handle mp_tx;
- //mring_handle mp_seg;
- mring_handle cpcb_seg;
- mring_handle lmsg_pool;
-
- struct stackx_stack lstack;
- struct stackx_stat lstat; //point to p_stackx_table->lstat[i];
-
- /**
- * Header of the input packet currently being processed.
- */
- /* global variables */
- struct disp_netif_list *netif_list;
-} stackx_instance;
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif /* __STACKX_INSTANCE_H__ */
diff --git a/stacks/lwip_stack/lwip_src/instance/spl_instance.c b/stacks/lwip_stack/lwip_src/instance/spl_instance.c
deleted file mode 100644
index 69b9d82..0000000
--- a/stacks/lwip_stack/lwip_src/instance/spl_instance.c
+++ /dev/null
@@ -1,49 +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 "nsfw_msg_api.h"
-#include "nsfw_init.h"
-#include "stackx/spl_sbr.h"
-#include "stackx/stackx_instance.h"
-
-stackx_instance *p_def_stack_instance = NULL;
-
-/**
- * process message from other module, but the MT module message will be delayed
- * to handle in the end of the loop to avoid to lose the message dequeued out.
- *
- * @param m the data_com_msg to handle
- */
-int
-spl_process (data_com_msg * m)
-{
- return call_msg_fun (m);
-}
-
-void
-add_disp_netif (struct netif *netif)
-{
- struct disp_netif_list *item = malloc (sizeof (struct disp_netif_list));
- if (!item)
- {
- NSPOL_LOGERR ("malloc failed");
- return;
- }
-
- item->netif = netif;
- item->next = p_def_stack_instance->netif_list;
- p_def_stack_instance->netif_list = item;
-}
diff --git a/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c b/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c
deleted file mode 100644
index 6e10c7a..0000000
--- a/stacks/lwip_stack/lwip_src/ip_module/configuration_reader.c
+++ /dev/null
@@ -1,1052 +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 <unistd.h>
-#include <sys/wait.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <time.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include "configuration_reader.h"
-#include "container_ip.h"
-#include "network.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "json.h"
-#include "spl_tcpip.h"
-
-#include <types.h>
-#include <nsfw_mgr_com_api.h>
-#include <nsfw_base_linux_api.h>
-#include "nsfw_maintain_api.h"
-
-NSTACK_STATIC struct config_data g_ip_module_buff;
-NSTACK_STATIC struct config_data *g_config_data;
-NSTACK_STATIC char ip_module_unix_socket[IP_MODULE_MAX_PATH_LEN + 1];
-NSTACK_STATIC char ip_module_unix_socket_dir_path[IP_MODULE_MAX_PATH_LEN + 1];
-//static unsigned long int g_thread_id = 0;
-
-#define MAX_CONNECTION_NUMBER 5
-#define TCP_OOS_LEN_MAX 250
-
-NSTACK_STATIC int read_configuration ();
-NSTACK_STATIC int unix_socket_listen (const char *servername);
-NSTACK_STATIC int process_query ();
-
-/*****************************************************************************
-* Prototype : is_digit_str
-* Description : check if a string contains only digit
-* Input : char *input
-* Output : 1 for yes, 0 for no
-* Return Value : int
-* Calls :
-* Called By : get_main_pid
-*
-*****************************************************************************/
-NSTACK_STATIC int
-is_digit_str (char *input)
-{
- if (NULL == input || '\0' == input[0])
- {
- return 0;
- }
-
- while (*input)
- {
- if (*input > '9' || *input < '0')
- {
- return 0;
- }
- input++;
- }
-
- return 1;
-}
-
-/*****************************************************************************
-* Prototype : process_query
-* Description : ./nStackCtrl -a query
-* Input : none
-* Output : none
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-process_query ()
-{
- int retval;
-
- if (0 == g_config_data->param.type[0])
- {
- return process_post (NULL, IP_MODULE_ALL, IP_MODULE_OPERATE_QUERY);
- }
-
- /*name & p are freed inside process_post */
- if (0 == strcmp (g_config_data->param.type, IP_MODULE_TYPE_PORT))
- {
- struct ip_action_param *p = malloc (sizeof (struct ip_action_param));
- if (p == NULL)
- {
- NSOPR_LOGERR ("name allocation failed!");
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "mem alloc error!");
- return -1;
- }
-
- retval =
- MEMSET_S (p, sizeof (struct ip_action_param), 0,
- sizeof (struct ip_action_param));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "MEMSET_S error!");
- free (p);
- return -1;
- }
-
- retval =
- STRCPY_S (p->container_id, sizeof (p->container_id),
- g_config_data->param.container_id);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (p);
- return -1;
- }
-
- retval =
- STRCPY_S (p->port_name, sizeof (p->port_name),
- g_config_data->param.name);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (p);
- return -1;
- }
-
- return process_post ((void *) p, IP_MODULE_IP, IP_MODULE_OPERATE_QUERY);
- }
- else if (0 == strcmp (g_config_data->param.type, IP_MODULE_TYPE_NETWORK))
- {
- if (0 == g_config_data->param.name[0])
- {
- return process_post (NULL, IP_MODULE_NETWORK_ALL,
- IP_MODULE_OPERATE_QUERY);
- }
- else
- {
- char *name = malloc (sizeof (g_config_data->param.name));
- if (NULL == name)
- {
- NSOPR_LOGERR ("name allocation failed!");
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "mem alloc error!");
- return -1;
- }
-
- retval =
- MEMSET_S (name, sizeof (g_config_data->param.name), 0,
- sizeof (g_config_data->param.name));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "MEMSET_S error!");
- free (name);
- return -1;
- }
-
- retval =
- STRCPY_S (name, sizeof (g_config_data->param.name),
- g_config_data->param.name);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (name);
- return -1;
- }
-
- return process_post ((void *) name, IP_MODULE_NETWORK,
- IP_MODULE_OPERATE_QUERY);
- }
- }
- else if (0 == strcmp (g_config_data->param.type, IP_MODULE_TYPE_IP))
- {
- if (0 == g_config_data->param.name[0])
- {
- return process_post (NULL, IP_MODULE_IP_ALL,
- IP_MODULE_OPERATE_QUERY);
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- }
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- }
-
- return -1;
-}
-
-int
-read_ipmoduleoperatesetnet_configuration ()
-{
- if (strcmp (g_config_data->param.type, IP_MODULE_TYPE_SETLOG) == 0)
- {
- if (NSCRTL_OK ==
- setlog_level_value (g_config_data->param.name,
- g_config_data->param.value))
- {
- NSOPR_LOGDBG ("set log level ok!");
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- }
- }
- else if (strcmp (g_config_data->param.type, TCP_MODULE_TYPE_SET_OOS_LEN) ==
- 0)
- {
- if (is_digit_str (g_config_data->param.value) == 0)
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR,
- "Invalid value:value must be digital and smaller than %u]value=\"%s\"",
- TCP_OOS_LEN_MAX, g_config_data->param.value);
- return 0;
- }
-
- unsigned int value_len = strlen (g_config_data->param.value);
- if ((value_len >= 2) && (g_config_data->param.value[0] == '0'))
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR,
- "Invalid value:value cannot start with 0");
- return 0;
- }
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : read_version
-* Description : Query Version by nStackCtrl
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-read_version ()
-{
- int retVal;
- json_object *version = json_object_new_object ();
-
- if (NULL == version)
- {
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "internal error for version=NULL!");
- return NSCRTL_ERR;
- }
-
- json_object_object_add (version, "moudle",
- json_object_new_string (NSTACK_GETVER_MODULE));
- json_object_object_add (version, "version",
- json_object_new_string (NSTACK_GETVER_VERSION));
- json_object_object_add (version, "buildtime",
- json_object_new_string (NSTACK_GETVER_BUILDTIME));
-
- json_object *version_array = json_object_new_array ();
- if (NULL == version_array)
- {
- json_object_put (version);
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "internal error for version_array=NULL!");
- return NSCRTL_ERR;
- }
-
- retVal = json_object_array_add (version_array, version);
-
- if (0 != retVal)
- {
- json_object_put (version_array);
- json_object_put (version);
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "internal error for json_object_array_add failed!");
- return NSCRTL_ERR;
- }
-
- const char *str = json_object_to_json_string (version_array);
-
- if (NULL == str)
- {
- json_object_put (version_array);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "internal error for str=NULL!");
- return NSCRTL_ERR;
- }
-
- size_t str_len = strlen (str);
- if (str_len >= sizeof (get_config_data ()->json_buff))
- {
- json_object_put (version_array);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "internal error!");
- return NSCRTL_ERR;
- }
-
- retVal =
- STRNCPY_S (get_config_data ()->json_buff,
- sizeof (get_config_data ()->json_buff), str, str_len);
- if (EOK != retVal)
- {
- json_object_put (version_array);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRNCPY_S error!");
- return NSCRTL_ERR;
- }
-
- json_object_put (version_array);
- return NSCRTL_OK;
-}
-
-void
-reset_config_data (void)
-{
- int retval = MEMSET_S (g_config_data, sizeof (struct config_data), 0,
- sizeof (struct config_data));
- if (EOK != retval)
- {
- printf ("MEMSET_S failed]retval=%d.\n", retval);
- exit (1);
- }
-}
-
-int
-get_network_json_data ()
-{
- STRCPY_S (g_config_data->param.type, sizeof (g_config_data->param.type),
- "network");
- g_config_data->param.action = IP_MODULE_OPERATE_ADD;
-
- char *tmp_config_path;
- tmp_config_path = realpath ("./network_data_tonStack.json", NULL);
- if (!tmp_config_path)
- {
- NSTCP_LOGINF ("Warning! It use the second search path ../configure");
- tmp_config_path =
- realpath ("../configure/network_data_tonStack.json", NULL);
- }
-
- if (!tmp_config_path)
- {
- return 1;
- }
-
- int fp = open (tmp_config_path, O_RDONLY);
- if (-1 == fp)
- {
- free (tmp_config_path);
- NSTCP_LOGINF ("network file open failed.\n");
- exit (1);
- }
- free (tmp_config_path);
-
- int nread = read (fp, g_config_data->json_buff,
- sizeof (g_config_data->json_buff) - 1);
- if (nread <= 0)
- {
- close (fp);
- NSTCP_LOGINF ("read failed %d.\n", nread);
- exit (1);
- }
-
- /* though MEMSET_S is done above, MEMSET_S can be removed */
- g_config_data->json_buff[nread] = '\0';
- close (fp);
-
- struct network_configuration *network = NULL;
- struct network_configuration *tmp = NULL;
-
- /* input shouldnot be same with return */
- network = parse_network_json (g_config_data->json_buff, NULL);
- if (!network)
- {
- NSTCP_LOGINF ("Invalid network data!");
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "Invalid network data!");
- return -1;
- }
-
- /* run process_post for each network, not only the head node */
- while (network)
- {
- tmp = network;
- network = network->next;
- int retval =
- add_network_configuration ((struct network_configuration *) tmp);
-
- /* When network exceeds max number, just log warning at operation.log */
- if (retval == NSCRTL_NETWORK_COUNT_EXCEED)
- {
- NSTCP_LOGINF
- ("Warning!! Network count exceed max allowed number]max=%d",
- MAX_NETWORK_COUNT);
- }
- else
- {
-
- NSTCP_LOGINF ("add_network_configuration %d", retval);
- NSOPR_SET_ERRINFO (retval, "add_network_configuration return %d",
- retval);
- }
-
- if (!retval)
- {
- /*init DPDK eth */
- if ((retval = init_new_network_configuration ()) != ERR_OK)
- {
- NSTCP_LOGINF ("process_configuration failed! %d", retval);
- free_network_configuration ((struct network_configuration *)
- tmp, IP_MODULE_TRUE);
- NSOPR_SET_ERRINFO (retval,
- "init_new_network_configuration return %d",
- retval);
- return -1;
- }
- }
- }
- NSTCP_LOGINF ("Get_network_json_data done!");
-
- return 0;
-}
-
-int
-get_ip_json_data ()
-{
- NSTCP_LOGINF ("get_ip_json_data start!");
-
- STRCPY_S (g_config_data->param.type, sizeof (g_config_data->param.type),
- "ip");
- g_config_data->param.action = IP_MODULE_OPERATE_ADD;
-
- char *tmp_config_path;
- tmp_config_path = realpath ("./ip_data.json", NULL);
- if (!tmp_config_path)
- {
- NSTCP_LOGINF ("Warning! It use the second search path ../configure");
- tmp_config_path = realpath ("../configure/ip_data.json", NULL);
- }
-
- if (!tmp_config_path)
- {
- return 1;
- }
-
- int fp = open (tmp_config_path, O_RDONLY);
- if (-1 == fp)
- {
- free (tmp_config_path);
- NSTCP_LOGINF ("network file open failed\n");
- exit (1);
- }
- free (tmp_config_path);
-
- int nread = read (fp, g_config_data->json_buff,
- sizeof (g_config_data->json_buff) - 1);
- if (nread <= 0)
- {
- close (fp);
- NSTCP_LOGINF ("read failed %d.\n", nread);
- exit (1);
- }
-
- /* though MEMSET_S is done above, MEMSET_S can be removed */
- g_config_data->json_buff[nread] = '\0';
- close (fp);
-
- struct container_ip *container =
- parse_container_ip_json (g_config_data->json_buff);
- if (container)
- {
- int retval = add_container (container);
-
- NSTCP_LOGINF ("add_container %d", retval);
- NSOPR_SET_ERRINFO (retval, "add_container return %d", retval);
- }
- else
- {
- NSTCP_LOGINF ("Invalid IP config data!");
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "Invalid IP config data!");
- return -1;
- }
- NSTCP_LOGINF ("get_ip_json_data done!");
-
- return 0;
-}
-
-int
-read_ipmoduleoperateadd_configuration ()
-{
- struct network_configuration *tmp = NULL;
- if (strcmp (g_config_data->param.type, IP_MODULE_TYPE_IP) == 0)
- {
- struct container_ip *container =
- parse_container_ip_json (g_config_data->json_buff);
- if (container)
- {
- return process_post ((void *) container, IP_MODULE_IP,
- IP_MODULE_OPERATE_ADD);
- }
- else
- {
- NSOPR_LOGERR ("Invalid IP config data!");
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "Invalid IP config data!");
- return -1;
- }
- }
- else if (strcmp (g_config_data->param.type, IP_MODULE_TYPE_NETWORK) == 0)
- {
- struct network_configuration *network = NULL;
-
- //Read network.json
-
- /* input shouldnot be same with return */
- network = parse_network_json (g_config_data->json_buff, NULL);
- if (!network)
- {
- NSOPR_LOGERR ("Invalid network data!");
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "Invalid network data!");
- return -1;
- }
-
- /* run process_post for each network, not only the head node */
- while (network)
- {
- tmp = network;
- network = network->next;
- int ret = process_post ((void *) tmp, IP_MODULE_NETWORK,
- IP_MODULE_OPERATE_ADD);
- if (ret == -1)
- {
- NSOPR_LOGERR ("process_configuration failed!");
- return -1;
- }
- }
- return 0;
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- return -1;
- }
-}
-
-int
-read_ipmoduleoperatedel_configuration ()
-{
- int retval;
-
- if (strcmp (g_config_data->param.type, IP_MODULE_TYPE_IP) == 0)
- {
- struct ip_action_param *p = malloc (sizeof (struct ip_action_param));
- if (NULL == p)
- {
- NSOPR_LOGERR ("ip_action_param allocation failed!");
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "mem alloc error!");
- return -1;
- }
-
- retval =
- MEMSET_S (p, sizeof (struct ip_action_param), 0,
- sizeof (struct ip_action_param));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "MEMSET_S error!");
- free (p);
- return -1;
- }
-
- retval =
- STRCPY_S (p->container_id, sizeof (p->container_id),
- g_config_data->param.container_id);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (p);
- return -1;
- }
-
- retval =
- STRCPY_S (p->port_name, sizeof (p->port_name),
- g_config_data->param.name);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (p);
- return -1;
- }
-
- return process_post ((void *) p, IP_MODULE_IP, IP_MODULE_OPERATE_DEL);
- }
- else if (strcmp (g_config_data->param.type, IP_MODULE_TYPE_NETWORK) == 0)
- {
- char *name = malloc (sizeof (g_config_data->param.name));
- if (name == NULL)
- {
- NSOPR_LOGERR ("name allocation failed!");
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "mem alloc error!");
- return -1;
- }
-
- retval =
- MEMSET_S (name, sizeof (g_config_data->param.name), 0,
- sizeof (g_config_data->param.name));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "MEMSET_S error!");
- free (name);
- return -1;
- }
-
- retval =
- STRCPY_S (name, sizeof (g_config_data->param.name),
- g_config_data->param.name);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "STRCPY_S error!");
- free (name);
- return -1;
- }
-
- return process_post ((void *) name, IP_MODULE_NETWORK,
- IP_MODULE_OPERATE_DEL);
- }
- else
- {
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- return -1;
- }
-}
-
-NSTACK_STATIC int
-read_configuration ()
-{
- int retval = -1;
- //u64 traceid = 0;
-
- /* initialise default memory */
- g_config_data->param.error = NSCRTL_OK;
-
- /* Make sure error_desc is inited to null string */
- g_config_data->param.error_desc[0] = '\0';
-
- //traceid = g_config_data->param.traceid;
-
- NSOPR_LOGINF
- ("g_config_data]type=%s,name=%s,value=%s,container_id=%s,action=%d,Json_buf=%s, traceid=%llu",
- g_config_data->param.type, g_config_data->param.name,
- g_config_data->param.value, g_config_data->param.container_id,
- g_config_data->param.action, g_config_data->json_buff,
- g_config_data->param.traceid);
-
- retval =
- MEMSET_S (g_config_data->param.error_desc,
- sizeof (g_config_data->param.error_desc), 0,
- sizeof (g_config_data->param.error_desc));
- if (0 != retval)
- {
- NSOPR_SET_ERRINFO (NSCRTL_ERR, "ERR:internal error, MEMSET_S failed]");
- return -1;
- }
-
- switch (g_config_data->param.action)
- {
- case IP_MODULE_OPERATE_DEL:
- {
- retval = read_ipmoduleoperatedel_configuration ();
- break;
- }
- case IP_MODULE_OPERATE_QUERY:
- {
- retval = process_query ();
- break;
- }
- case IP_MODULE_OPERATE_ADD:
- {
- retval = read_ipmoduleoperateadd_configuration ();
- break;
- }
- case IP_MODULE_OPERATE_SET:
- retval = read_ipmoduleoperatesetnet_configuration ();
- break;
- case IP_MODULE_GET_VERSION:
- {
- retval = read_version ();
- break;
- }
-
- default:
- {
- retval = -1; //here, must set retval to -1
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "input error!");
- break;
- }
- }
-
- return retval;
-}
-
-NSTACK_STATIC int
-unix_socket_listen (const char *servername)
-{
- int fd, retval;
- unsigned int len;
- struct stat st;
- struct sockaddr_un un;
-
- if (stat (ip_module_unix_socket_dir_path, &st) == 0)
- {
- NSOPR_LOGDBG (" /directory is present");
- }
- else
- {
- NSOPR_LOGERR (" /var/run/nStack/ directory is not present ");
- return (-1);
- }
-
- if ((fd = nsfw_base_socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
- {
- return -1;
- }
-
- retval = unlink (servername); /* in case it already exists */
- if (0 != retval)
- {
- NSOPR_LOGWAR ("unlink failed]retval=%d,errno=%d", retval, errno);
- }
-
- retval = MEMSET_S (&un, sizeof (un), 0, sizeof (un));
- if (EOK != retval)
- {
- (void) nsfw_base_close (fd);
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- return -1;
- }
-
- un.sun_family = AF_UNIX;
- retval = STRCPY_S (un.sun_path, sizeof (un.sun_path), servername);
- if (EOK != retval)
- {
- (void) nsfw_base_close (fd);
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- return -1;
- }
-
- len =
- (unsigned int) (offsetof (struct sockaddr_un, sun_path) +
- strlen (servername));
-
- if (nsfw_base_bind (fd, (struct sockaddr *) &un, len) < 0)
- {
- (void) nsfw_base_close (fd);
- return -1;
- }
- else
- {
- if (nsfw_base_listen (fd, MAX_CONNECTION_NUMBER) < 0)
- {
- (void) nsfw_base_close (fd);
- return -1;
- }
- else
- {
- return fd;
- }
- }
-}
-
-/*****************************************************************************
-* Prototype : read_fn
-* Description : process new ip module msg
-* Input : i32 fd
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-read_fn (i32 fd)
-{
- ssize_t size;
- ssize_t offset = 0;
- size_t left = MAX_IP_MODULE_BUFF_SIZE;
- while (left > 0)
- {
- size = nsfw_base_recv (fd, (char *) g_config_data + offset, left, 0);
- if (size > 0)
- {
- offset += size;
- left -= (size_t) size;
- }
- else
- {
- NSOPR_LOGERR ("Error when recieving]errno=%d,err_string=%s", errno,
- strerror (errno));
- break;
- }
- }
-
- if (left != 0)
- {
- (void) nsfw_base_close (fd);
- return;
- }
-
- (void) read_configuration (); // if it returns -1, the err desc info will be wrote to g_config_data, so no need to check return value.
-
- offset = 0;
- left = MAX_IP_MODULE_BUFF_SIZE;
- while (left > 0)
- {
- size =
- nsfw_base_send (fd, (char *) g_config_data + offset, left,
- MSG_NOSIGNAL);
-
- if (size > 0)
- {
- offset += size;
- left -= (size_t) size;
- }
- else
- {
- NSOPR_LOGERR ("Error when Sending data]errno=%d", errno);
- break;
- }
- }
-
- (void) nsfw_base_close (fd);
- return;
-}
-
-/*****************************************************************************
-* Prototype : ip_module_new_msg
-* Description : recv new config message
-* Input : i32 epfd
-* i32 fd
-* u32 events
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-ip_module_new_msg (i32 epfd, i32 fd, u32 events)
-{
- if ((events & EPOLLERR) || (events & EPOLLHUP) || (!(events & EPOLLIN)))
- {
- nsfw_mgr_unreg_sock_fun (fd);
- (void) nsfw_base_close (fd);
- return TRUE;
- }
-
- nsfw_mgr_unreg_sock_fun (fd);
- read_fn (fd);
- return TRUE;
-}
-
-int
-init_ip_module_unix_socket_path ()
-{
- const char *directory = "/var/log/nStack";
- const char *home_dir = getenv ("HOME");
-
- if (getuid () != 0 && home_dir != NULL)
- directory = home_dir;
-
- if (STRCPY_S
- (ip_module_unix_socket_dir_path, IP_MODULE_MAX_PATH_LEN, directory) < 0)
- {
- NSOPR_LOGERR ("STRCPY_S fail]");
- return -1;
- }
-
- if (STRCAT_S
- (ip_module_unix_socket_dir_path, IP_MODULE_MAX_PATH_LEN,
- "/ip_module") < 0)
- {
- NSOPR_LOGERR ("STRCAT_S fail]");
- return -1;
- }
-
- if (STRCPY_S
- (ip_module_unix_socket, IP_MODULE_MAX_PATH_LEN,
- ip_module_unix_socket_dir_path) < 0)
- {
- NSOPR_LOGERR ("STRCPY_S fail]");
- return -1;
- }
-
- if (STRCAT_S
- (ip_module_unix_socket, IP_MODULE_MAX_PATH_LEN,
- "/ip_module_unix_sock") < 0)
- {
- NSOPR_LOGERR ("STRCAT_S fail]");
- return -1;
- }
-
- NSOPR_LOGINF ("ip_module_unix_socket=%s", ip_module_unix_socket);
- NSOPR_LOGINF ("ip_module_unix_socket_dir_path=%s",
- ip_module_unix_socket_dir_path);
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : ip_module_new_connection
-* Description : recv new connect for network config
-* Input : i32 epfd
-* i32 fd
-* u32 events
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-ip_module_new_connection (i32 epfd, i32 fd, u32 events)
-{
- if ((events & EPOLLERR) || (events & EPOLLHUP) || (!(events & EPOLLIN)))
- {
- (void) nsfw_base_close (fd);
- NSFW_LOGINF ("listen disconnect!]epfd=%d,listen=%d,event=0x%x", epfd,
- fd, events);
- nsfw_mgr_unreg_sock_fun (fd);
-
- if (init_ip_module_unix_socket_path () < 0)
- {
- NSFW_LOGERR ("Error when init path]epfd=%d,listen_fd=%d,event=0x%x",
- epfd, fd, events);
- return FALSE;
- }
-
- i32 listen_fd = unix_socket_listen (ip_module_unix_socket);
- if (listen_fd < 0)
- {
- NSFW_LOGERR ("get listen_fd faied!]epfd=%d,listen_fd=%d,event=0x%x",
- epfd, fd, events);
- return FALSE;
- }
-
- if (FALSE ==
- nsfw_mgr_reg_sock_fun (listen_fd, ip_module_new_connection))
- {
- (void) nsfw_base_close (listen_fd);
- return FALSE;
- }
- return TRUE;
- }
-
- struct sockaddr in_addr;
- socklen_t in_len;
- int infd;
- in_len = sizeof in_addr;
-
- while (1)
- {
- infd = nsfw_base_accept (fd, &in_addr, &in_len);
- if (infd == -1)
- {
- break;
- }
-
- if (FALSE == nsfw_mgr_reg_sock_fun (infd, ip_module_new_msg))
- {
- NSFW_LOGINF ("accept new fd but reg failed]new_mgr_fd=%d", infd);
- return FALSE;
- }
- NSFW_LOGINF ("accept new fd]new_mgr_fd=%d", infd);
- }
-
- return TRUE;
-}
-
-int
-init_configuration_reader ()
-{
- int error_number = 0;
- INITPOL_LOGINF ("CONFIGURATION", "init_configuration_reader", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_START);
- g_config_data = &g_ip_module_buff;
-
- if (init_ip_module_unix_socket_path () < 0)
- {
- INITPOL_LOGERR ("CONFIGURATION", "init_configuration_reader",
- "Error when init path", LOG_INVALID_VALUE,
- MODULE_INIT_FAIL);
- return -1;
- }
-
- i32 listen_fd = unix_socket_listen (ip_module_unix_socket);
- if (listen_fd < 0)
- {
- error_number = errno;
- INITPOL_LOGERR ("CONFIGURATION", "init_configuration_reader",
- "when listening ip_module_unix_socket", error_number,
- MODULE_INIT_FAIL);
- return -1;
- }
-
- NSOPR_LOGINF ("start mgr_com module!]listern_fd=%d", listen_fd);
-
- if (FALSE == nsfw_mgr_reg_sock_fun (listen_fd, ip_module_new_connection))
- {
- (void) nsfw_base_close (listen_fd);
- NSOPR_LOGERR ("nsfw_mgr_reg_sock_fun failed]listen_fd=%d", listen_fd);
- return -1;
- }
-
- INITPOL_LOGINF ("CONFIGURATION", "init_configuration_reader", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_SUCCESS);
- return 0;
-}
-
-struct config_data *
-get_config_data ()
-{
- return g_config_data;
-}
diff --git a/stacks/lwip_stack/lwip_src/ip_module/container_ip.c b/stacks/lwip_stack/lwip_src/ip_module/container_ip.c
deleted file mode 100644
index 52f7c64..0000000
--- a/stacks/lwip_stack/lwip_src/ip_module/container_ip.c
+++ /dev/null
@@ -1,1132 +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 <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-#include "lwip/inet.h"
-#include "trp_rb_tree.h"
-#include "container_ip.h"
-#include "network.h"
-#include "netif.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "config_common.h"
-#include "igmp.h"
-#include "spl_def.h"
-#include "stackx_ip_addr.h"
-#include "hal_api.h"
-#include "spl_hal.h"
-
-struct container_list g_container_list = { 0 };
-static trp_rb_root_t g_container_ip_root = { 0 }; //only handled in tcpip thread, no need protect it with a lock
-static trp_rb_root_t g_container_multicast_root = { 0 }; //only handled in tcpip thread, no need protect it with a lock
-
-static void free_container_port (struct container_port *port,
- bool_t only_free);
-
-/*unsigned int value is typecasted into void * pointer and passed as argument to
-this function. so the value can never be > 0xFFFFFFFF. so can suppress the warning*/
-
-static int
-ip_compare (trp_key_t left, trp_key_t right)
-{
- //return (int)((unsigned long)left - (unsigned long)right);
-
- if (left > right)
- {
- return 1;
- }
- else if (left < right)
- {
- return -1;
- }
- else
- {
- return 0;
- }
-}
-
-NSTACK_STATIC bool_t
-is_container_ok (struct container_ip * container)
-{
- if (!container->ports_list)
- {
- return 0;
- }
-
- return 1;
-}
-
-NSTACK_STATIC void
-add_port (struct container_ip *container, struct container_port *port)
-{
- if (port->ip_cidr_list)
- {
- port->next = container->ports_list;
- container->ports_list = port;
- }
- else
- {
- free_container_port (port, IP_MODULE_TRUE);
- }
-}
-
-static void
-add_ip_cidr (struct container_port *port,
- struct container_port_ip_cidr *ip_cidr)
-{
- if (!ip_cidr)
- {
- return;
- }
-
- ip_cidr->next = port->ip_cidr_list;
- port->ip_cidr_list = ip_cidr;
- return;
-}
-
-NSTACK_STATIC void
-add_multilcast_ip (struct container_port *port,
- struct container_multicast_id *muticastIP)
-{
- if (!muticastIP)
- {
- return;
- }
-
- muticastIP->next = port->multicast_list;
- port->multicast_list = muticastIP;
- return;
-}
-
-NSTACK_STATIC void
-free_container_port_ip_cidr (struct container_port_ip_cidr *ip_cidr,
- bool_t only_free)
-{
- output_api *api = get_output_api ();
- struct container_port_ip_cidr *ip_cidr_tmp = NULL;
-
- while (ip_cidr)
- {
- ip_cidr_tmp = ip_cidr;
- ip_cidr = ip_cidr_tmp->next;
- if (!only_free)
- {
- if (api->del_netif_ip)
- {
- struct network_configuration *network =
- get_network_by_ip_with_tree (ip_cidr_tmp->ip);
- if (network)
- {
- if (network->phy_net->bond_name[0] != 0)
- {
- (void) api->del_netif_ip (network->phy_net->bond_name, ip_cidr_tmp->ip); //fails only when netif_name not exist, no side effect so don't check return value.
- }
- else
- {
- (void) api->del_netif_ip (network->phy_net->
- header->nic_name,
- ip_cidr_tmp->ip);
- }
- }
- else
- {
- NSOPR_LOGERR ("can't find network by]IP=%u",
- ip_cidr_tmp->ip);
- }
- }
-
- trp_rb_erase ((void *) (u64_t) ip_cidr_tmp->ip,
- &g_container_ip_root, ip_compare);
- }
-
- free (ip_cidr_tmp);
- ip_cidr_tmp = NULL;
- }
-}
-
-static void
-free_container_multicast (struct container_multicast_id *multicast,
- bool_t only_free)
-{
- struct container_multicast_id *tmp = NULL;
-
- while (multicast)
- {
- tmp = multicast;
- multicast = multicast->next;
- if (!only_free)
- {
- trp_rb_erase ((void *) (u64_t) tmp->ip, &g_container_multicast_root,
- ip_compare);
- }
-
- free (tmp);
- tmp = NULL;
- }
-}
-
-static void
-free_container_port (struct container_port *port, bool_t only_free)
-{
- struct container_port *port_tmp = NULL;
- struct container_port *port_curr = port;
-
- while (port_curr)
- {
- port_tmp = port_curr;
- port_curr = port_tmp->next;
-
- free_container_multicast (port_tmp->multicast_list, only_free);
- free_container_port_ip_cidr (port_tmp->ip_cidr_list, only_free);
-
- if (port_tmp->buffer)
- {
- free_port_buffer (port_tmp->buffer);
- port_tmp->buffer = NULL;
- }
-
- free (port_tmp);
- port_tmp = NULL;
- }
-}
-
-void
-free_container (struct container_ip *container, bool_t only_free)
-{
- struct container_ip *container_tmp = NULL;
- struct container_ip *container_curr = container;
-
- while (container_curr)
- {
- container_tmp = container_curr;
- container_curr = container_tmp->next;
- if (container_tmp->ports_list)
- {
- free_container_port (container_tmp->ports_list, only_free);
- }
-
- free (container_tmp);
- container_tmp = NULL;
- }
-}
-
-struct container_port *
-parse_port_obj (struct json_object *port_obj)
-{
- int retval;
- struct json_object *port_name_obj = NULL;
- struct json_object *ip_cidr_list_obj = NULL;
- struct json_object *mcIDObj = NULL;
-
- if (!port_obj)
- {
- NSOPR_LOGERR ("port_obj is null");
- return NULL;
- }
-
- struct container_port *port = malloc (sizeof (struct container_port));
- if (!port)
- {
- NSOPR_LOGERR ("malloc failed");
- return NULL;
- }
-
- retval =
- MEMSET_S (port, sizeof (struct container_port), 0,
- sizeof (struct container_port));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- free (port);
- return NULL;
- }
-
- json_object_object_get_ex (port_obj, "port_name", &port_name_obj);
- if (port_name_obj)
- {
- const char *port_name = json_object_get_string (port_name_obj);
- if ((NULL == port_name)
- || (strlen (port_name) >= IP_MODULE_MAX_NAME_LEN))
- {
- NSOPR_LOGERR ("port name is not ok");
- goto RETURN_ERROR;
- }
-
- retval =
- STRCPY_S (port->port_name, sizeof (port->port_name), port_name);
-
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
- }
-
- 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[IP_MODULE_LENGTH_32] = { 0 };
- struct container_port_ip_cidr *port_ip_cidr =
- malloc (sizeof (struct container_port_ip_cidr));
- if (NULL == port_ip_cidr)
- {
- NSOPR_LOGERR ("malloc failed");
- goto RETURN_ERROR;
- }
-
- retval =
- MEMSET_S (port_ip_cidr,
- sizeof (struct container_port_ip_cidr), 0,
- sizeof (struct container_port_ip_cidr));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- const char *ip_cidr = json_object_get_string (ip_cidr_obj);
- if ((NULL == ip_cidr) || (ip_cidr[0] == 0))
- {
- NSOPR_LOGERR ("ip_cidr is not ok");
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- 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))
- {
- NSOPR_LOGERR
- ("Error : Ipaddress notation must be in ip cidr notation!");
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- retval =
- STRNCPY_S (tmp, sizeof (tmp), ip_cidr,
- (size_t) (sub - ip_cidr));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRNCPY_S failed]ret=%d", retval);
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- struct in_addr addr;
- int iRet;
- retval = MEMSET_S (&addr, sizeof (addr), 0, sizeof (addr));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- iRet = spl_inet_aton (tmp, &addr);
- if (0 == iRet)
- {
- NSOPR_LOGERR ("spl_inet_aton failed");
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- port_ip_cidr->ip = addr.s_addr;
- iRet = atoi (sub + 1);
- if ((iRet <= 0) || (iRet > IP_MODULE_LENGTH_32))
- {
- NSOPR_LOGERR ("IP mask length is not correct");
- free (port_ip_cidr);
- port_ip_cidr = NULL;
- goto RETURN_ERROR;
- }
-
- port_ip_cidr->mask_len = (unsigned int) iRet;
- add_ip_cidr (port, port_ip_cidr);
- }
- }
- }
-
- json_object_object_get_ex (port_obj, "multicast_id", &mcIDObj);
- if (mcIDObj)
- {
- int j;
- int arrLen = json_object_array_length (mcIDObj);
- if (0 == arrLen)
- {
- NSOPR_LOGERR ("arrLen is 0");
- goto RETURN_ERROR;
- }
-
- for (j = 0; j < arrLen; ++j)
- {
- struct json_object *elemObj =
- json_object_array_get_idx (mcIDObj, j);
-
- if (elemObj)
- {
- struct json_object *tObj = NULL;
- const char *tStr;
- int ret;
- struct in_addr addr;
-
- struct container_multicast_id *mcID =
- malloc (sizeof (struct container_multicast_id));
- if (NULL == mcID)
- {
- NSOPR_LOGERR ("Can't alloc container multicast id");
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (elemObj, "group_ip", &tObj);
- if (NULL == tObj)
- {
- NSOPR_LOGERR ("No group_IP");
- free (mcID);
- mcID = NULL;
- goto RETURN_ERROR;
- }
-
- tStr = json_object_get_string (tObj);
- if (NULL == tStr)
- {
- NSOPR_LOGERR ("Get Multiple cast group IP Failed");
- free (mcID);
- mcID = NULL;
- goto RETURN_ERROR;
- }
-
- ret = spl_inet_aton (tStr, &addr);
- if (0 == ret)
- {
- NSOPR_LOGERR ("Parse group IP Failed");
- free (mcID);
- mcID = NULL;
- goto RETURN_ERROR;
- }
-
- mcID->ip = addr.s_addr;
- add_multilcast_ip (port, mcID);
- }
- }
- }
-
- const char *port_json = json_object_get_string (port_obj);
- if ((NULL == port_json) || (0 == strlen (port_json)))
- {
- NSOPR_LOGERR ("json_object_get_string failed");
- goto RETURN_ERROR;
- }
-
- port->buffer = malloc_port_buffer ();
- if (!port->buffer)
- {
- goto RETURN_ERROR;
- }
-
- retval =
- STRCPY_S (get_port_json (port), IP_MODULE_PORT_JSON_LEN, port_json);
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
-
- return port;
-RETURN_ERROR:
- free_container_port (port, IP_MODULE_TRUE);
- return NULL;
-}
-
-struct container_ip *
-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;
-
- if (!obj)
- {
- return NULL;
- }
-
- struct container_ip *container = malloc (sizeof (struct container_ip));
- if (container == NULL)
- {
- json_object_put (obj);
- return NULL;
- }
-
- retval =
- MEMSET_S (container, sizeof (struct container_ip), 0,
- sizeof (struct container_ip));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (obj, "containerID", &container_id_obj);
- if (container_id_obj)
- {
- const char *container_id = json_object_get_string (container_id_obj);
- if ((container_id == NULL) || (container_id[0] == 0)
- || (strlen (container_id) >= IP_MODULE_MAX_NAME_LEN))
- {
- goto RETURN_ERROR;
- }
-
- retval =
- MEMSET_S (container->container_id, sizeof (container->container_id),
- 0, sizeof (container->container_id));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
-
- retval =
- STRCPY_S (container->container_id, sizeof (container->container_id),
- container_id);
-
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- goto RETURN_ERROR;
- }
- }
- else
- {
- /* this mandatory parameter */
- NSOPR_LOGWAR ("json_object_object_get_ex containerID failed");
- }
-
- 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 (port_num == 0)
- {
- /* this mandatory parameter */
- goto RETURN_ERROR;
- }
-
- for (i = 0; i < port_num; i++)
- {
- struct json_object *port_obj =
- json_object_array_get_idx (ports_list_obj, i);
- struct container_port *port = parse_port_obj (port_obj);
- if (!port)
- {
- goto RETURN_ERROR;
- }
-
- add_port (container, port);
- }
- }
- else
- {
- /* mandatory parameter */
- goto RETURN_ERROR;
- }
-
- /* Check if this function is required, or needs more check inside this function,
- as some of them are alraedy validated
- */
- if (!is_container_ok (container))
- {
- goto RETURN_ERROR;
- }
-
- json_object_put (obj);
- return container;
-
-RETURN_ERROR:
- json_object_put (obj);
- free_container (container, IP_MODULE_TRUE);
- return NULL;
-}
-
-bool_t
-is_ip_match_netif (unsigned int ip, char *netif_name)
-{
- if (!netif_name)
- {
- return 0;
- }
-
- if (trp_rb_search ((void *) (u64_t) ip, &g_container_ip_root, ip_compare))
- {
- struct network_configuration *network =
- get_network_by_ip_with_tree (ip);
- if (network && network->phy_net && network->phy_net->header)
- {
- if (0 ==
- strncmp (netif_name, network->phy_net->header->nic_name,
- HAL_MAX_NIC_NAME_LEN))
- {
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-inline bool_t
-is_ip_exist (unsigned int ip)
-{
- if (trp_rb_search ((void *) (u64_t) ip, &g_container_ip_root, ip_compare))
- {
- return 1;
- }
-
- return 0;
-}
-
-int
-validate_addcontainerconfig (struct container_ip *container)
-{
- struct container_port *port;
- struct container_ip *old =
- get_container_by_container_id (container->container_id);
- struct container_port *tmp = container->ports_list;
-
- if (old)
- {
- struct container_port *last = NULL;
-
- while (tmp)
- {
- if (get_port (container->container_id, tmp->port_name))
- {
- NSOPR_LOGERR ("port=%s already exists!", tmp->port_name);
- return NSCRTL_RD_EXIST;
- }
-
- last = tmp;
- tmp = tmp->next;
- }
-
- (void) last;
- }
-
- /* check if port_name duplicates in one json configuration */
- tmp = container->ports_list;
- while (tmp)
- {
- if (get_port_from_container (tmp))
- {
- NSOPR_LOGERR ("port=%s duplicates!", tmp->port_name);
- return NSCRTL_RD_EXIST;
- }
-
- tmp = tmp->next;
- }
-
- bool_t is_nstack_dpdk_port;
- struct container_port **ref = &container->ports_list;
- while ((port = *ref))
- {
- is_nstack_dpdk_port = 1;
- struct container_port_ip_cidr *ip_cidr = port->ip_cidr_list;
- while (ip_cidr)
- {
- struct network_configuration *network =
- get_network_by_ip_with_tree (ip_cidr->ip);
- if (network && (0 == strcmp (network->type_name, "nstack-dpdk")))
- {
- struct netif *pnetif;
- if (get_netif_by_ip (ip_cidr->ip))
- {
- NSOPR_LOGERR ("ip exists]IP=0x%08x", ip_cidr->ip);
- return NSCRTL_RD_EXIST;
- }
-
- if (network->phy_net->bond_name[0] != 0)
- {
- pnetif =
- find_netif_by_if_name (network->phy_net->bond_name);
- }
- else
- {
- pnetif =
- find_netif_by_if_name (network->phy_net->
- header->nic_name);
- }
-
- if (!pnetif)
- {
- NSOPR_LOGERR ("can't find netif, network json:%s",
- get_network_json (network));
- return NSCRTL_ERR;
- }
-
- if (0 == port->port_name[0])
- {
- NSOPR_LOGINF
- ("ip=0x%08x is in nstack dpdk network, but port_name is null, json:%s",
- ip_cidr->ip, get_port_json (port));
- is_nstack_dpdk_port = 0;
- break;
- }
- }
- else
- {
- NSOPR_LOGINF ("port %s is not in nstack dpdk network, json:%s",
- port->port_name, get_port_json (port));
- is_nstack_dpdk_port = 0;
- break;
- }
-
- ip_cidr = ip_cidr->next;
- }
-
- /* only use nstack dpdk port */
- if (is_nstack_dpdk_port)
- {
- ref = &port->next;
- }
- else
- {
- *ref = port->next;
- port->next = NULL;
- free_container_port (port, IP_MODULE_TRUE);
- }
- }
-
- return (!container->ports_list) ? NSCRTL_FREE_ALL_PORT : NSCRTL_OK;
-}
-
-/* get the num of IPs in a container , which in a certain subnet */
-extern struct network_list g_network_list;
-extern inline int is_in_subnet (unsigned int ip, struct ip_subnet *subnet);
-NSTACK_STATIC inline int get_network_ip_count
- (struct container_ip *container, struct ip_subnet *subnet)
-{
- int ip_count = 0;
- struct container_port *port_list = NULL;
- struct container_ip *ci = container;
-
- while (ci)
- {
- port_list = ci->ports_list;
- while (port_list)
- {
- struct container_port_ip_cidr *ip_list = port_list->ip_cidr_list;
- while (ip_list)
- {
- if (!is_in_subnet (ip_list->ip, subnet))
- {
- ip_count++;
- }
-
- ip_list = ip_list->next;
- }
-
- port_list = port_list->next;
- }
-
- ci = ci->next;
- }
-
- return ip_count;
-}
-
-int
-check_ip_count (struct container_ip *container)
-{
- int cur_count = 0;
- int new_count = 0;
-
- if (NULL == container)
- {
- return 1;
- }
-
- struct network_configuration *network = g_network_list.header;
- while (network)
- {
- cur_count =
- get_network_ip_count (g_container_list.header, network->ip_subnet);
- new_count = get_network_ip_count (container, network->ip_subnet);
-
- if ((cur_count > MAX_NETWORK_IP_COUNT)
- || (new_count > MAX_NETWORK_IP_COUNT)
- || (cur_count + new_count > MAX_NETWORK_IP_COUNT))
- {
- NSOPR_LOGERR
- ("reach ip addr max count]network=%s, max=%d, current=%d, new=%d.",
- network->network_name, MAX_NETWORK_IP_COUNT, cur_count,
- new_count);
- return 0;
- }
-
- network = network->next;
- }
-
- return 1;
-}
-
-int
-match_groupaddr (struct container_multicast_id *multi_list,
- spl_ip_addr_t * groupaddr)
-{
- struct container_multicast_id *group_info = multi_list;
-
- while (group_info)
- {
- if (group_info->ip == groupaddr->addr)
- {
- return 1;
- }
-
- group_info = group_info->next;
- }
-
- return 0;
-}
-
-int
-add_container (struct container_ip *container)
-{
- int retVal = 0;
-
- /* need to check if any of the netif operation failed, then we should return fail */
- retVal = validate_addcontainerconfig (container);
- if (retVal != NSCRTL_OK)
- {
- free_container (container, IP_MODULE_TRUE);
- return (NSCRTL_FREE_ALL_PORT == retVal) ? NSCRTL_OK : retVal;
- }
-
- /* control max network and ipaddress count */
- if (!check_ip_count (container))
- {
- free_container (container, IP_MODULE_TRUE);
- return NSCRTL_IP_COUNT_EXCEED;
- }
-
- struct container_port *last = NULL;
- struct container_ip *old =
- get_container_by_container_id (container->container_id);
- if (old)
- {
- struct container_port *tmp = container->ports_list;
- while (tmp)
- {
- /* here we don't need to check "if tmp->port_name == NULL", as validate_addcontainerconfig() has done this. */
- if (get_port (container->container_id, tmp->port_name))
- {
- free_container (container, IP_MODULE_TRUE);
- NSOPR_LOGERR ("port exist!");
- return NSCRTL_RD_EXIST;
- }
-
- last = tmp;
- tmp = tmp->next;
- }
- }
- else
- {
- container->next = g_container_list.header;
- g_container_list.header = container;
- }
-
- output_api *api = get_output_api ();
- struct container_port *port = container->ports_list;
- while (port)
- {
- struct container_port_ip_cidr *ip_cidr = port->ip_cidr_list;
- while (ip_cidr)
- {
- if (api->add_netif_ip)
- {
- struct network_configuration *network =
- get_network_by_ip_with_tree (ip_cidr->ip);
- if (network)
- {
- unsigned int mask = ~0;
- mask =
- (mask << (IP_MODULE_SUBNET_MASK_LEN - ip_cidr->mask_len));
- mask = spl_htonl (mask);
- if (network->phy_net->bond_name[0] != 0)
- {
- (void) api->add_netif_ip (network->phy_net->bond_name, ip_cidr->ip, mask); //no need to check return value, validate_addcontainerconfig() has been checked parameters.
- }
- else
- {
- (void) api->add_netif_ip (network->phy_net->
- header->nic_name, ip_cidr->ip,
- mask);
- }
- }
- else
- {
- NSOPR_LOGERR ("can't find network by]IP=%u,port_name=%s",
- ip_cidr->ip, port->port_name);
- }
- }
-
- retVal =
- trp_rb_insert ((void *) (u64_t) ip_cidr->ip, (void *) port,
- &g_container_ip_root, ip_compare);
-
- if (0 != retVal)
- {
- NSOPR_LOGERR ("trp_rb_insert failed]ip_cidr->ip=%u",
- ip_cidr->ip);
- }
-
- ip_cidr = ip_cidr->next;
- }
- port = port->next;
- }
-
- if (old)
- {
- if (last)
- {
- last->next = old->ports_list;
- old->ports_list = container->ports_list;
- }
-
- container->ports_list = NULL;
- free_container (container, IP_MODULE_FALSE);
- }
-
- return NSCRTL_OK;
-}
-
-struct container_ip *
-get_container_by_container_id (char *container_id)
-{
- if (NULL == container_id)
- {
- NSOPR_LOGERR ("Param input container ID is NULL");
- return NULL;
- }
-
- struct container_ip *container = g_container_list.header;
- while (container)
- {
- if (0 == strcmp (container->container_id, container_id))
- {
- return container;
- }
-
- container = container->next;
- }
-
- return NULL;
-}
-
-/*****************************************************************************
-* Prototype : getIpCfgAll
-* Description : Get All ip configurations
-* Input : char *
-* size_t
-* Output : char * patern:[***,***,***]
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-getIpCfgAll (char *jsonBuf, size_t size)
-{
- int retval;
-
- if (NULL == jsonBuf)
- {
- return NSCRTL_ERR;
- }
-
- if (size < 2)
- {
- NSOPR_LOGERR ("get all ip cfg error, buffer is not enough.");
- return NSCRTL_STATUS_ERR;
- }
-
- char bfirstData = 1;
- *jsonBuf = '[';
- jsonBuf = jsonBuf + 1;
-
- /*need another two char to keep [and ] */
- size_t len = size - 2;
- size_t strsize = 0;
- struct container_port *port = NULL;
- struct container_ip *container = g_container_list.header;
- while (container)
- {
- port = container->ports_list;
- while (port)
- {
- if (NULL == port->buffer)
- {
- port = port->next;
- continue;
- }
-
- strsize = strlen (get_port_json (port)) + 1;
-
- /*always reserve 1 char */
- if ((strsize > 0) && (strsize < len))
- {
- if (bfirstData)
- {
- bfirstData = 0;
- }
- else
- {
- *jsonBuf = ',';
- jsonBuf = jsonBuf + 1;
- len = len - 1;
- }
-
- retval = STRCPY_S (jsonBuf, len, get_port_json (port));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- return NSCRTL_ERR;
- }
-
- len = len - strlen (get_port_json (port));
- jsonBuf = jsonBuf + strlen (get_port_json (port));
- }
- else
- {
- NSOPR_LOGERR ("get all ip cfg error, buffer is not enough.");
- return NSCRTL_STATUS_ERR;
- }
-
- port = port->next;
- }
-
- container = container->next;
- }
-
- *jsonBuf = ']';
- return 0;
-}
-
-int
-del_port (char *container_id, char *port_name)
-{
- struct container_port *port = NULL;
- struct container_port **ref = NULL;
- struct container_ip *container = NULL;
- struct container_ip **container_ref = &g_container_list.header;
-
- while ((container = *container_ref))
- {
- NSOPR_LOGDBG ("container->container_id=%s,container_id=%p",
- container->container_id, container_id);
- if (strcmp (container->container_id, container_id) == 0)
- {
- ref = &container->ports_list;
- while ((port = *ref))
- {
- if (strcmp (port_name, port->port_name) == 0)
- {
- *ref = port->next;
- port->next = NULL;
- free_container_port (port, IP_MODULE_FALSE);
- return 0;
- }
-
- ref = &port->next;
- }
-
- break;
- }
-
- container_ref = &container->next;
- }
-
- return NSCRTL_RD_NOT_EXIST;
-}
-
-struct container_port *
-get_port (char *container_id, char *port_name)
-{
- struct container_port *port = NULL;
- struct container_ip *container = g_container_list.header;
-
- while (container)
- {
- if (strcmp (container->container_id, container_id) == 0)
- {
- port = container->ports_list;
- while (port)
- {
- if (strcmp (port_name, port->port_name) == 0)
- {
- return port;
- }
-
- port = port->next;
- }
- }
-
- container = container->next;
- }
-
- return NULL;
-}
-
-struct container_port *
-get_port_from_container (struct container_port *port)
-{
- char *port_name = port->port_name;
- struct container_port *tmp = port->next;
-
- while (tmp)
- {
- if (strcmp (port_name, tmp->port_name) == 0)
- {
- return tmp;
- }
-
- tmp = tmp->next;
- }
-
- return NULL;
-}
diff --git a/stacks/lwip_stack/lwip_src/ip_module/ip_module_api.c b/stacks/lwip_stack/lwip_src/ip_module/ip_module_api.c
deleted file mode 100644
index 0ae61ed..0000000
--- a/stacks/lwip_stack/lwip_src/ip_module/ip_module_api.c
+++ /dev/null
@@ -1,347 +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 <stdlib.h>
-#include <string.h>
-#include "inet.h"
-#include "spl_ip_addr.h"
-#include "ip_module_api.h"
-#include "container_ip.h"
-#include "network.h"
-#include "config_common.h"
-#include "configuration_reader.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "spl_hal.h"
-#include "stackx_spl_share.h"
-#include "stackx/spl_api.h"
-#include "stackx_common.h"
-#include "spl_tcpip.h"
-
-static output_api g_output_api = { 0 };
-
-void
-regist_output_api (output_api * api)
-{
- if (NULL == api)
- {
- NSOPR_LOGERR ("error!!!param api==NULL]");
- return;
- }
-
- g_output_api = *api;
-}
-
-output_api *
-get_output_api ()
-{
- return &g_output_api;
-}
-
-int
-process_post (void *arg, ip_module_type Type,
- ip_module_operate_type operate_type)
-{
- /* only when add network, in other words:
- only when (IP_MODULE_NETWORK == Type) && (IP_MODULE_OPERATE_ADD == operate_type),
- process_configuration() is called in read_fn thread itself.
- other cases, will post_to tcpip_thread to handle them.
-
- tips: when add network, it need to post msg(add netif) to tcpip thread and wait a sem,
- but after the msg is handled by tcpip thread, the sem could be post.
- so adding netword is handled in read_fn thread, can't be moved to tcpip thread.
-
- But we should know, many global and static variables maybe not safe(netif,sc_dpdk etc.),
- because they can be visited by multi-thread. */
- if ((IP_MODULE_NETWORK == Type) && (IP_MODULE_OPERATE_ADD == operate_type))
- {
- return process_configuration (arg, Type, operate_type);
- }
-
- if (g_output_api.post_to)
- {
- int retval = g_output_api.post_to (arg, Type, operate_type);
- if ((post_ip_module_msg == g_output_api.post_to) && (retval != ERR_OK)
- && (arg != NULL))
- {
- if ((IP_MODULE_IP == Type)
- && (IP_MODULE_OPERATE_ADD == operate_type))
- {
- free_container ((struct container_ip *) arg, IP_MODULE_TRUE);
- }
- else
- {
- free (arg);
- }
-
- arg = NULL;
- NSOPR_LOGERR ("post failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_INPUT_ERR, "process_post failed!");
- }
-
- return retval;
- }
- else
- {
- NSOPR_LOGERR ("g_output_api.post_to==NULL");
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "ERR:internal error, g_output_api.post_to==NULL]");
- return -1;
- }
-}
-
-/* arg can be NULL, no need check */
-int
-process_configuration (void *arg, ip_module_type Type,
- ip_module_operate_type operate_type)
-{
- NSOPR_LOGINF ("precoess begin]arg=%p,action=%d,type=%d", arg, operate_type,
- Type);
- int retval = 0;
-
- switch (Type)
- {
- case IP_MODULE_NETWORK:
- switch (operate_type)
- {
- case IP_MODULE_OPERATE_ADD:
- retval =
- add_network_configuration ((struct network_configuration *) arg);
-
- /* When network exceeds max number, just log warning at operation.log */
- if (retval == NSCRTL_NETWORK_COUNT_EXCEED)
- {
- NSOPR_LOGWAR
- ("Warning!! Network count exceed max allowed number]max=%d",
- MAX_NETWORK_COUNT);
- }
- else
- {
- NSOPR_SET_ERRINFO (retval,
- "add_network_configuration return %d",
- retval);
- }
-
- if (!retval)
- {
- /*init DPDK eth */
- if ((retval = init_new_network_configuration ()) != ERR_OK)
- {
- free_network_configuration ((struct network_configuration *)
- arg, IP_MODULE_TRUE);
- NSOPR_SET_ERRINFO (retval,
- "init_new_network_configuration return %d",
- retval);
- }
- }
- break;
- case IP_MODULE_OPERATE_DEL:
- {
- retval = del_network_by_name ((char *) arg);
- NSOPR_SET_ERRINFO (retval, "del_network_by_name return %d",
- retval);
- free (arg);
- arg = NULL;
- }
- break;
- case IP_MODULE_OPERATE_QUERY:
- {
- struct network_configuration *network =
- get_network_by_name ((char *) arg);
- if (!network)
- {
- retval = NSCRTL_RD_NOT_EXIST;
- NSOPR_SET_ERRINFO (retval, "get_network_by_name return %d",
- retval);
- }
- else
- {
- if (strlen (get_network_json (network)) >
- sizeof (get_config_data ()->json_buff) - 1)
- {
- NSOPR_LOGERR
- ("length of network->network_json too big]len=%u",
- strlen (get_network_json (network)));
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "ERR:internal error, buf is not enough]");
- retval = NSCRTL_ERR;
- }
-
- retval =
- STRCPY_S (get_config_data ()->json_buff,
- sizeof (get_config_data ()->json_buff),
- get_network_json (network));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "ERR:internal error, STRCPY_S failed]ret=%d",
- retval);
- retval = NSCRTL_ERR;
- }
-
- }
-
- free (arg);
- arg = NULL;
- }
- break;
- default:
- break;
- }
-
- break;
- case IP_MODULE_IP:
- switch (operate_type)
- {
- case IP_MODULE_OPERATE_ADD:
- retval = add_container ((struct container_ip *) arg);
- NSOPR_SET_ERRINFO (retval, "add_container return %d", retval);
- break;
- case IP_MODULE_OPERATE_DEL:
- {
- struct ip_action_param *p = (struct ip_action_param *) arg;
- retval = del_port (p->container_id, p->port_name);
- NSOPR_SET_ERRINFO (retval, "del_port return %d", retval);
- free (arg);
- arg = NULL;
- }
- break;
- case IP_MODULE_OPERATE_QUERY:
- {
- struct ip_action_param *p = (struct ip_action_param *) arg;
- struct container_port *port =
- get_port (p->container_id, p->port_name);
- if (!port)
- {
- retval = NSCRTL_RD_NOT_EXIST;
- NSOPR_SET_ERRINFO (retval, "get_port return %d", retval);
- }
- else
- {
- if (strlen (get_port_json (port)) >
- sizeof (get_config_data ()->json_buff) - 1)
- {
- NSOPR_LOGERR
- ("length of network->network_json too big]len=%u",
- strlen (get_port_json (port)));
- retval = NSCRTL_ERR;
- }
-
- retval =
- STRCPY_S (get_config_data ()->json_buff,
- sizeof (get_config_data ()->json_buff),
- get_port_json (port));
- if (EOK != retval)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retval);
- retval = NSCRTL_ERR;
- }
-
- }
-
- free (arg);
- arg = NULL;
- }
- break;
- default:
- break;
- }
-
- break;
- case IP_MODULE_NETWORK_ALL:
- if (operate_type == IP_MODULE_OPERATE_QUERY)
- {
- retval =
- get_network_all (get_config_data ()->json_buff,
- sizeof (get_config_data ()->json_buff));
- NSOPR_SET_ERRINFO (retval, "get_network_all return %d", retval);
- }
-
- break;
-
- case IP_MODULE_IP_ALL:
- if (operate_type == IP_MODULE_OPERATE_QUERY)
- {
- retval =
- getIpCfgAll (get_config_data ()->json_buff,
- sizeof (get_config_data ()->json_buff));
- NSOPR_SET_ERRINFO (retval, "getIpCfgAll return %d", retval);
- }
-
- break;
-
- case IP_MODULE_ALL:
- if (operate_type == IP_MODULE_OPERATE_QUERY)
- {
- NSOPR_LOGERR
- ("---------- IP_MODULE_ALL query is not implemented --------------");
- NSOPR_SET_ERRINFO (NSCRTL_ERR,
- "ERR:This query interface is not implemented. ErrCode:%d",
- NSCRTL_ERR);
- }
-
- break;
-
- default:
- break;
- }
-
- NSOPR_LOGINF ("process finished]result=%d", retval);
-
- return retval;
-}
-
-void
-ip_subnet_print (struct ip_subnet *subnet)
-{
- spl_ip_addr_t ipAddr;
-
- if (subnet == NULL)
- {
- return;
- }
-
- ipAddr.addr = spl_htonl (subnet->subnet);
- NSPOL_LOGINF (IP_DEBUG, "]\t Subnet=%s/%u", spl_inet_ntoa (ipAddr),
- subnet->mask_len);
-}
-
-port_buffer *
-malloc_port_buffer ()
-{
- port_buffer *buffer = malloc (sizeof (port_buffer));
- return buffer;
-}
-
-void
-free_port_buffer (port_buffer * buffer)
-{
- free (buffer);
-}
-
-network_buffer *
-malloc_network_buffer ()
-{
- network_buffer *buffer = malloc (sizeof (network_buffer));
- return buffer;
-}
-
-void
-free_network_buffer (network_buffer * buffer)
-{
- free (buffer);
-}
diff --git a/stacks/lwip_stack/lwip_src/ip_module/network.c b/stacks/lwip_stack/lwip_src/ip_module/network.c
deleted file mode 100644
index d7c9630..0000000
--- a/stacks/lwip_stack/lwip_src/ip_module/network.c
+++ /dev/null
@@ -1,1106 +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 <stdio.h>
-#include <sys/socket.h>
-#include <string.h>
-#include "json.h"
-#include "trp_rb_tree.h"
-#include "network.h"
-#include "nstack_log.h"
-#include "config_common.h"
-#include "stackx_spl_share.h"
-#include "stackx/spl_api.h"
-#include "sharedmemory.h"
-#include "nstack_securec.h"
-#include "spl_hal.h"
-#include "inet.h"
-
-struct network_list g_network_list = { 0 };
-
-extern struct stackx_port_zone *p_stackx_port_zone;
-extern u32 spl_hal_is_nic_exist (const char *name);
-
-static bool_t
-is_phy_net_ok (struct phy_net *pst_phy_net)
-{
- if (!pst_phy_net || !pst_phy_net->header)
- {
- NSOPR_LOGERR ("phy_net is not ok");
- return 0;
- }
-
- return 1;
-}
-
-static bool_t
-is_network_configuration_ok (struct network_configuration *network)
-{
- while (network)
- {
- if (!is_phy_net_ok (network->phy_net))
- {
- return 0;
- }
-
- network = network->next;
- }
-
- return 1;
-}
-
-static void
-add_ref_nic (struct phy_net *pst_phy_net, struct ref_nic *pst_ref_nic)
-{
- pst_ref_nic->next = pst_phy_net->header;
- pst_phy_net->header = pst_ref_nic;
-}
-
-static void
-free_ref_nic (struct ref_nic *pst_ref_nic)
-{
- struct ref_nic *nic = pst_ref_nic;
- struct ref_nic *tmp = NULL;
-
- while (nic)
- {
- tmp = nic;
- nic = tmp->next;
- free (tmp);
- }
-}
-
-static void
-free_phy_net (struct phy_net *pst_phy_net)
-{
- if (pst_phy_net)
- {
- free_ref_nic (pst_phy_net->header);
- free (pst_phy_net);
- }
-}
-
-static void
-free_ip_subnet (struct ip_subnet *subnet, bool_t only_free)
-{
- struct ip_subnet *tmp = NULL;
-
- while (subnet)
- {
- tmp = subnet;
- subnet = subnet->next;
- free (tmp);
- }
-}
-
-void
-free_network_configuration (struct network_configuration *network,
- bool_t only_free)
-{
- if (network)
- {
- free_ip_subnet (network->ip_subnet, only_free);
- free_phy_net (network->phy_net);
-
- if (network->buffer)
- {
- free_network_buffer (network->buffer);
- network->buffer = NULL;
- }
-
- free (network);
- }
-}
-
-inline int
-is_in_subnet (unsigned int ip, struct ip_subnet *subnet)
-{
- unsigned int mask = ~0;
- unsigned int seg_ip, seg;
-
- mask = mask << (IP_MODULE_SUBNET_MASK_LEN - subnet->mask_len);
-
- seg_ip = ip & mask;
- seg = subnet->subnet & mask;
-
- return seg_ip != seg ? 1 : 0;
-}
-
-inline struct network_configuration *
-get_network_by_ip_with_tree (unsigned int ip)
-{
- unsigned int h_ip = spl_ntohl (ip);
- struct network_configuration *p = g_network_list.header;
-
- while (p)
- {
- if (!is_in_subnet (h_ip, p->ip_subnet))
- {
- return p;
- }
-
- p = p->next;
- }
-
- return NULL;
-}
-
-struct network_configuration *
-get_network_by_name (char *name)
-{
- struct network_configuration *network = g_network_list.header;
-
- while (network)
- {
- if (strcasecmp (name, network->network_name) == 0)
- {
- return network;
- }
-
- network = network->next;
- }
-
- return NULL;
-}
-
-struct network_configuration *
-get_network_by_nic_name (char *name)
-{
- if (NULL == name)
- {
- return NULL;
- }
-
- struct ref_nic *refnic = NULL;
- struct phy_net *phynet = NULL;
- struct network_configuration *network = g_network_list.header;
- while (network)
- {
- phynet = network->phy_net;
- if (phynet)
- {
- if ((phynet->bond_mode != -1)
- && strcmp (name, phynet->bond_name) == 0)
- {
- return network;
- }
-
- refnic = phynet->header;
- while (refnic)
- {
- if (strcmp (name, refnic->nic_name) == 0)
- {
- return network;
- }
-
- refnic = refnic->next;
- }
- }
-
- network = network->next;
- }
-
- return NULL;
-}
-
-struct network_configuration *
-get_network_by_name_from_json (struct network_configuration *network)
-{
- char *name = network->network_name;
- struct network_configuration *tmp = network->next;
-
- while (tmp)
- {
- if (strcasecmp (name, tmp->network_name) == 0)
- {
- return tmp;
- }
-
- tmp = tmp->next;
- }
-
- return NULL;
-}
-
-NSTACK_STATIC inline int
-get_network_count ()
-{
- int count = 0;
- struct network_configuration *network = g_network_list.header;
-
- while (network)
- {
- count++;
- network = network->next;
- }
-
- return count;
-}
-
-int
-get_network_all (char *jsonBuf, size_t size)
-{
- if (NULL == jsonBuf)
- {
- return NSCRTL_ERR;
- }
-
- if (size < 2)
- {
- NSOPR_LOGERR ("get all ip cfg error, buffer is not enough.");
- return NSCRTL_STATUS_ERR;
- }
-
- int retVal;
- char bfirstData = 1;
- *jsonBuf = '[';
- jsonBuf = jsonBuf + 1;
-
- size_t len = size - 2; // strlen("[]")
- size_t strsize = 0;
- struct network_configuration *network = g_network_list.header;
- while (network)
- {
- if (NULL == network->buffer)
- {
- network = network->next;
- continue;
- }
-
- if (bfirstData)
- {
- bfirstData = 0;
- }
- else
- {
- *jsonBuf = ',';
- jsonBuf = jsonBuf + 1;
- len = len - 1;
- }
-
- strsize = strlen (get_network_json (network)) + 1;
- if ((strsize > 0) && (strsize < len))
- {
- retVal = STRCPY_S (jsonBuf, len, get_network_json (network));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- return NSCRTL_STATUS_ERR;
- }
-
- len = len - strlen (get_network_json (network));
- jsonBuf = jsonBuf + strlen (get_network_json (network));
- }
- else
- {
- NSOPR_LOGERR ("get all network cfg error, buffer is not enough.");
- return NSCRTL_STATUS_ERR;
- }
-
- network = network->next;
- }
-
- *jsonBuf = ']';
- return 0;
-}
-
-int
-nic_already_bind (const char *nic_name)
-{
- struct ref_nic *pnic = NULL;
- struct network_configuration *pnetwork = g_network_list.header;
-
- while (pnetwork)
- {
- pnic = pnetwork->phy_net->header;
- while (pnic)
- {
- if (0 == strcmp (pnic->nic_name, nic_name))
- {
- return 1;
- }
-
- pnic = pnic->next;
- }
-
- pnetwork = pnetwork->next;
- }
-
- return 0;
-}
-
-int
-nic_already_init (const char *nic_name)
-{
- unsigned int i;
-
- for (i = 0; i < p_stackx_port_zone->port_num; i++)
- {
- if (0 ==
- strcmp (p_stackx_port_zone->stackx_one_port[i].linux_ip.if_name,
- nic_name))
- {
- return 1;
- }
- }
-
- return 0;
-}
-
-extern struct stackx_port_info *head_used_port_list;
-int
-bonded_nic_already_bind (struct network_configuration *pnetwork,
- const char *nic_name)
-{
- struct stackx_port_info *p_port_list = head_used_port_list;
-
- while (p_port_list)
- {
- if (0 == strcmp (p_port_list->linux_ip.if_name, nic_name))
- {
- return 1;
- }
-
- p_port_list = p_port_list->next_use_port;
- }
-
- struct ref_nic *pnic = NULL;
-
- while (pnetwork)
- {
- if (pnetwork->phy_net->bond_mode == -1)
- {
- pnic = pnetwork->phy_net->header;
- if (0 == strcmp (pnic->nic_name, nic_name))
- {
- return 1;
- }
- }
-
- pnetwork = pnetwork->next;
- }
-
- return 0;
-}
-
-extern struct bond_ports_info bond_ports_array;
-int
-nic_already_bond (struct network_configuration *pnetwork,
- const char *nic_name)
-{
- u8_t i, j;
- struct bond_set *s;
-
- for (i = 0; i < bond_ports_array.cnt; i++)
- {
- s = &bond_ports_array.ports[i];
- for (j = 0; j < s->slave_port_cnt; j++)
- {
- if (strcmp (s->slave_ports[j], nic_name) == 0)
- {
- return 1;
- }
- }
- }
-
- struct ref_nic *pnic = NULL;
-
- while (pnetwork)
- {
- if (pnetwork->phy_net->bond_mode != -1)
- {
- pnic = pnetwork->phy_net->header;
- while (pnic)
- {
- if (0 == strcmp (pnic->nic_name, nic_name))
- {
- return 1;
- }
-
- pnic = pnic->next;
- }
- }
-
- pnetwork = pnetwork->next;
- }
-
- return 0;
-}
-
-/* add network to list in descending sort */
-void
-add_network_to_list (struct network_configuration *network)
-{
- struct network_configuration *curr = g_network_list.header;
- struct network_configuration *prev = NULL;
-
- network->next = NULL;
-
- while (curr)
- {
- if (network->ip_subnet->mask_len >= curr->ip_subnet->mask_len)
- {
- break;
- }
-
- prev = curr;
- curr = curr->next;
- }
-
- if (NULL == prev)
- {
- network->next = curr;
- g_network_list.header = network;
- }
- else
- {
- network->next = prev->next;
- prev->next = network;
- }
-}
-
-int
-add_network_configuration (struct network_configuration
- *pst_network_configuration)
-{
- struct network_configuration *tmp = pst_network_configuration;
- struct ref_nic *pheader;
-
- if (tmp)
- {
- if (get_network_by_name (tmp->network_name)
- || get_network_by_name_from_json (tmp))
- {
- NSOPR_LOGERR ("network exists or duplicates]network_name=%s",
- tmp->network_name);
- free_network_configuration (pst_network_configuration,
- IP_MODULE_TRUE);
- return NSCRTL_RD_EXIST;
- }
-
- if (strcasecmp ("nstack-dpdk", tmp->type_name) != 0)
- {
- NSOPR_LOGWAR ("illegal network type]type_name=%s", tmp->type_name);
- }
-
- /* control max network and ipaddress count */
- if (get_network_count () >= MAX_NETWORK_COUNT)
- {
- NSOPR_LOGERR ("network reach]max_count=%d", MAX_NETWORK_COUNT);
- free_network_configuration (pst_network_configuration,
- IP_MODULE_TRUE);
- return NSCRTL_NETWORK_COUNT_EXCEED;
- }
-
- /* If nic is not existed or not initiated, return error */
- pheader = tmp->phy_net->header;
- while (pheader)
- {
- if (!spl_hal_is_nic_exist (pheader->nic_name)
- && !nic_already_init (pheader->nic_name)
- && strncmp (tmp->nic_type_name, "vhost", strlen ("vhost")))
- {
- NSOPR_LOGERR ("Invalid configuration %s not exist Error! ",
- pheader->nic_name);
- free_network_configuration (pst_network_configuration,
- IP_MODULE_TRUE);
- return NSCRTL_RD_NOT_EXIST;
- }
-
- pheader = pheader->next;
- }
-
- /* if a bonded nic has been inited in a non-bond network, return error */
- if (tmp->phy_net->bond_mode != -1)
- {
- pheader = tmp->phy_net->header;
- while (pheader)
- {
- if (bonded_nic_already_bind
- (pst_network_configuration, pheader->nic_name))
- {
- NSOPR_LOGERR ("Invalid configuration %s already bind! ",
- pheader->nic_name);
- free_network_configuration (pst_network_configuration,
- IP_MODULE_TRUE);
- return NSCRTL_INPUT_ERR;
- }
-
- pheader = pheader->next;
- }
- }
-
- /* if a non-bond nic has been inited in a bonded network, return error */
- if (tmp->phy_net->bond_mode == -1)
- {
- pheader = tmp->phy_net->header;
- while (pheader)
- {
- if (nic_already_bond
- (pst_network_configuration, pheader->nic_name))
- {
- NSOPR_LOGERR ("Invalid configuration %s already bind! ",
- pheader->nic_name);
- free_network_configuration (pst_network_configuration,
- IP_MODULE_TRUE);
- return NSCRTL_INPUT_ERR;
- }
-
- pheader = pheader->next;
- }
- }
- }
- else
- {
- NSOPR_LOGERR ("Invalid network configuration!");
- return NSCRTL_INPUT_ERR;
- }
-
- /*looping through each node has move to read_ipmoduleoperateadd_configuration */
- ip_subnet_print (tmp->ip_subnet);
- add_network_to_list (tmp);
-
- return NSCRTL_OK;
-}
-
-struct network_configuration *
-parse_network_obj (struct json_object *network_obj)
-{
- int retVal;
- struct network_configuration *pst_network_configuration = NULL;
- struct json_object *network_name_obj = NULL, *args_obj = NULL, *phy_obj =
- NULL, *type_name_obj = NULL;
- struct json_object *ref_nic_list_obj = NULL, *bond_mode_obj =
- NULL, *bond_name_obj = NULL, *ipam_obj = NULL;
- struct json_object *subnet_obj = NULL, *nic_type_obj = NULL;
-
- if (!network_obj)
- {
- NSOPR_LOGERR ("network_obj is null");
- goto RETURN_ERROR;
- }
-
- pst_network_configuration = malloc (sizeof (struct network_configuration));
- if (NULL == pst_network_configuration)
- {
- NSOPR_LOGERR ("malloc failed");
- goto RETURN_ERROR;
- }
-
- retVal =
- MEMSET_S (pst_network_configuration,
- sizeof (struct network_configuration), 0,
- sizeof (struct network_configuration));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d.", retVal);
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (network_obj, "name", &network_name_obj);
- if (network_name_obj)
- {
- const char *network_name = json_object_get_string (network_name_obj);
- if ((NULL == network_name) || (network_name[0] == 0)
- || (strlen (network_name) >= IP_MODULE_MAX_NAME_LEN))
- {
- NSOPR_LOGERR ("network_name is not ok");
- goto RETURN_ERROR;
- }
-
- retVal =
- STRCPY_S (pst_network_configuration->network_name,
- sizeof (pst_network_configuration->network_name),
- network_name);
-
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGERR ("name is not ok");
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (network_obj, "type", &type_name_obj);
- if (type_name_obj)
- {
- const char *type_name = json_object_get_string (type_name_obj);
- if ((NULL == type_name) || (type_name[0] == 0)
- || (strlen (type_name) >= IP_MODULE_MAX_NAME_LEN))
- {
- NSOPR_LOGERR ("type parse error");
- goto RETURN_ERROR;
- }
-
- retVal =
- STRCPY_S (pst_network_configuration->type_name,
- sizeof (pst_network_configuration->type_name), type_name);
-
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGERR ("type is not ok");
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (network_obj, "args", &args_obj);
- if (args_obj)
- {
- json_object_object_get_ex (args_obj, "phynet", &phy_obj);
- if (phy_obj)
- {
- struct phy_net *pst_phy_net = malloc (sizeof (struct phy_net));
- if (NULL == pst_phy_net)
- {
- NSOPR_LOGERR ("malloc failed");
- goto RETURN_ERROR;
- }
-
- retVal =
- MEMSET_S (pst_phy_net, sizeof (struct phy_net), 0,
- sizeof (struct phy_net));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d", retVal);
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (phy_obj, "nic_type", &nic_type_obj); /*lint !e534 no need to check return value */
- if (nic_type_obj)
- {
- const char *nic_type_name =
- json_object_get_string (nic_type_obj);
- if (strcmp (nic_type_name, "pci") != 0
- && strcmp (nic_type_name, "vhost") != 0)
- {
- NSOPR_LOGERR ("unsupported nic_type]nic_type=%s",
- nic_type_name);
- goto RETURN_ERROR;
- }
-
- retVal =
- STRCPY_S (pst_network_configuration->nic_type_name,
- sizeof (pst_network_configuration->nic_type_name),
- nic_type_name);
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("strcpy_s failed]ret=%d", retVal);
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGINF
- ("nic_type not specified, use default type]defaul nic_type=pci");
- retVal =
- STRCPY_S (pst_network_configuration->nic_type_name,
- sizeof (pst_network_configuration->nic_type_name),
- "pci");
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("strcpy_s failed]ret=%d", retVal);
- goto RETURN_ERROR;
- }
- }
-
- json_object_object_get_ex (phy_obj, "ref_nic", &ref_nic_list_obj);
- if (ref_nic_list_obj)
- {
- int j;
- int ref_nic_num = json_object_array_length (ref_nic_list_obj);
- if (0 == ref_nic_num)
- {
- NSOPR_LOGERR ("ref_nic is empty");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- for (j = ref_nic_num - 1; j >= 0; j--)
- {
- struct json_object *ref_nic_obj =
- json_object_array_get_idx (ref_nic_list_obj, j);
- if (ref_nic_obj)
- {
- const char *nic_name =
- json_object_get_string (ref_nic_obj);
- if ((NULL == nic_name) || (nic_name[0] == 0)
- || (strlen (nic_name) >= HAL_MAX_NIC_NAME_LEN))
- {
- NSOPR_LOGERR ("nic_name is not ok");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- struct ref_nic *pst_ref_nic =
- malloc (sizeof (struct ref_nic));
- if (NULL == pst_ref_nic)
- {
- NSOPR_LOGERR ("malloc failed");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- retVal =
- MEMSET_S (pst_ref_nic, sizeof (struct ref_nic), 0,
- sizeof (struct ref_nic));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d.", retVal);
- free (pst_ref_nic);
- pst_ref_nic = NULL;
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- retVal =
- STRCPY_S (pst_ref_nic->nic_name,
- sizeof (pst_ref_nic->nic_name), nic_name);
-
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- free (pst_ref_nic);
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- add_ref_nic (pst_phy_net, pst_ref_nic);
- }
- }
- }
- else
- {
- NSOPR_LOGERR ("ref_nic is not ok");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (phy_obj, "bond_mode", &bond_mode_obj);
- if (bond_mode_obj)
- {
- pst_phy_net->bond_mode = json_object_get_int (bond_mode_obj);
- if (pst_phy_net->bond_mode != -1)
- {
- json_object_object_get_ex (phy_obj, "bond_name",
- &bond_name_obj);
- if (bond_name_obj)
- {
- const char *bond_name =
- json_object_get_string (bond_name_obj);
- if ((NULL == bond_name)
- || (strlen (bond_name) >= IP_MODULE_MAX_NAME_LEN))
- {
- NSOPR_LOGERR ("bond_name is not ok");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- retVal =
- MEMSET_S (pst_phy_net->bond_name,
- sizeof (pst_phy_net->bond_name), 0,
- sizeof (pst_phy_net->bond_name));
-
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d.", retVal);
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
-
- retVal =
- STRNCPY_S (pst_phy_net->bond_name,
- sizeof (pst_phy_net->bond_name), bond_name,
- strlen (bond_name));
-
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRNCPY_S failed]retVal=%d", retVal);
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGERR ("bond_name is not ok");
- free_phy_net (pst_phy_net);
- goto RETURN_ERROR;
- }
- }
- }
- else
- {
- pst_phy_net->bond_mode = -1;
- }
-
- pst_network_configuration->phy_net = pst_phy_net;
- }
- else
- {
- NSOPR_LOGERR ("phy_net is not ok");
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGERR ("args is not ok");
- goto RETURN_ERROR;
- }
-
- json_object_object_get_ex (network_obj, "ipam", &ipam_obj);
- if (ipam_obj)
- {
- json_object_object_get_ex (ipam_obj, "subnet", &subnet_obj);
- if (subnet_obj)
- {
- int iRet;
- char tmp[IP_MODULE_LENGTH_32] = { 0 };
- const char *subnet = json_object_get_string (subnet_obj);
- struct in_addr addr;
-
- retVal = MEMSET_S (&addr, sizeof (addr), 0, sizeof (addr));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d.", retVal);
- goto RETURN_ERROR;
- }
-
- if ((NULL == subnet) || (subnet[0] == 0)
- || (strlen (subnet) > IP_MODULE_LENGTH_32))
- {
- NSOPR_LOGERR ("subnet is not ok");
- goto RETURN_ERROR;
- }
-
- const char *sub = strstr (subnet, "/");
- if ((NULL == sub)
- || (sizeof (tmp) - 1 <= (unsigned int) (sub - subnet))
- || (strlen (sub) >= sizeof (tmp) - 1))
- {
- NSOPR_LOGERR ("subnet is not ok");
- goto RETURN_ERROR;
- }
-
- iRet =
- STRNCPY_S (tmp, sizeof (tmp), subnet, (size_t) (sub - subnet));
- if (EOK != iRet)
- {
- NSOPR_LOGERR ("STRNCPY_S failed]ret=%d", iRet);
- goto RETURN_ERROR;
- }
-
- iRet = spl_inet_aton (tmp, &addr);
- if (0 == iRet)
- {
- NSOPR_LOGERR ("subnet is not ok");
- goto RETURN_ERROR;
- }
-
- pst_network_configuration->ip_subnet =
- (struct ip_subnet *) malloc (sizeof (struct ip_subnet));
- if (!pst_network_configuration->ip_subnet)
- {
- NSOPR_LOGERR ("malloc failed");
- goto RETURN_ERROR;
- }
-
- retVal =
- MEMSET_S (pst_network_configuration->ip_subnet,
- sizeof (struct ip_subnet), 0,
- sizeof (struct ip_subnet));
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("MEMSET_S failed]ret=%d.", retVal);
- goto RETURN_ERROR;
- }
-
- pst_network_configuration->ip_subnet->next = NULL;
- pst_network_configuration->ip_subnet->subnet =
- spl_ntohl (addr.s_addr);
-
- iRet = atoi (sub + 1);
- if ((iRet < 0) || (iRet > IP_MODULE_LENGTH_32))
- {
- NSOPR_LOGERR ("mask is not ok");
- goto RETURN_ERROR;
- }
-
- pst_network_configuration->ip_subnet->mask_len =
- (unsigned int) iRet;
- }
- else
- {
- NSOPR_LOGERR ("subnet is not ok");
- goto RETURN_ERROR;
- }
- }
- else
- {
- NSOPR_LOGERR ("ipam is not ok");
- goto RETURN_ERROR;
- }
-
- const char *network_json = json_object_get_string (network_obj);
- if ((NULL == network_json) || (network_json[0] == 0))
- {
- NSOPR_LOGERR ("json_object_get_string failed");
- goto RETURN_ERROR;
- }
-
- pst_network_configuration->buffer = malloc_network_buffer ();
- if (!pst_network_configuration->buffer)
- {
- NSOPR_LOGERR ("malloc_network_buffer failed");
- goto RETURN_ERROR;
- }
-
- retVal =
- STRCPY_S (get_network_json (pst_network_configuration),
- IP_MODULE_NETWORK_JSON_LEN, network_json);
- if (EOK != retVal)
- {
- NSOPR_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- goto RETURN_ERROR;
- }
-
- return pst_network_configuration;
-
-RETURN_ERROR:
- if (pst_network_configuration)
- {
- free_network_configuration (pst_network_configuration, IP_MODULE_TRUE);
- pst_network_configuration = NULL;
- }
-
- return NULL;
-}
-
-struct network_configuration *
-parse_network_json (char *param, struct network_configuration *pnetwork_list)
-{
- struct json_object *obj = json_tokener_parse (param);
- struct network_configuration *pst_network_configuration = NULL;
-
- if (!obj)
- {
- NSOPR_LOGERR ("parse error");
- return NULL;
- }
-
- int network_num = json_object_array_length (obj);
- if (0 == network_num)
- {
- json_object_put (obj);
- return NULL;
- }
-
- int i;
- for (i = 0; i < network_num; i++)
- {
- struct json_object *network_obj = json_object_array_get_idx (obj, i);
- if (network_obj)
- {
- pst_network_configuration = parse_network_obj (network_obj);
- if (!pst_network_configuration)
- {
- NSOPR_LOGERR ("parse_network_obj error");
- goto RETURN_ERROR;
- }
-
- pst_network_configuration->next = pnetwork_list;
- pnetwork_list = pst_network_configuration;
- pst_network_configuration = NULL;
- }
- else
- {
- NSOPR_LOGERR ("network_obj is NULL");
- goto RETURN_ERROR;
- }
- }
-
- if (pnetwork_list)
- {
- if (!is_network_configuration_ok (pnetwork_list))
- {
- NSOPR_LOGERR ("network_configuration is not ok");
- goto RETURN_ERROR;
- }
- }
-
- json_object_put (obj);
- return pnetwork_list;
-
-RETURN_ERROR:
- free_network_configuration (pnetwork_list, IP_MODULE_TRUE);
- json_object_put (obj);
- return NULL;
-}
-
-int
-del_network_by_name (char *name)
-{
- struct network_configuration *network = NULL;
- struct network_configuration **ref = &g_network_list.header;
-
- while ((network = *ref))
- {
- if (strcasecmp (name, network->network_name) == 0)
- {
- *ref = network->next;
- network->next = NULL;
-
- free_network_configuration (network, IP_MODULE_FALSE);
- return 0;
- }
-
- ref = &network->next;
- }
-
- return NSCRTL_RD_NOT_EXIST;
-}
-
-int
-is_in_same_network (unsigned int src_ip, unsigned int dst_ip)
-{
- if (src_ip == dst_ip)
- {
- return 1;
- }
-
- struct network_configuration *src = get_network_by_ip_with_tree (src_ip);
- struct network_configuration *dst = get_network_by_ip_with_tree (dst_ip);
- if (src && (src == dst))
- {
- return 1;
- }
-
- return 0;
-}
-
-struct network_configuration *
-get_network_list ()
-{
- return g_network_list.header;
-}
diff --git a/stacks/lwip_stack/lwip_src/ip_module/trp_rb_tree.c b/stacks/lwip_stack/lwip_src/ip_module/trp_rb_tree.c
deleted file mode 100644
index 1990f52..0000000
--- a/stacks/lwip_stack/lwip_src/ip_module/trp_rb_tree.c
+++ /dev/null
@@ -1,563 +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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "trp_rb_tree.h"
-
-NSTACK_STATIC void
-__rb_rotate_left (struct trp_rb_node *X, struct trp_rb_root *root)
-{
- /**************************
- * rotate Node X to left *
- **************************/
-
- struct trp_rb_node *Y = X->rb_right;
-
- /* estblish X->Right link */
- X->rb_right = Y->rb_left;
- if (Y->rb_left != NULL)
- Y->rb_left->rb_parent = X;
-
- /* estblish Y->Parent link */
- Y->rb_parent = X->rb_parent;
- if (X->rb_parent)
- {
- if (X == X->rb_parent->rb_left)
- X->rb_parent->rb_left = Y;
- else
- X->rb_parent->rb_right = Y;
- }
- else
- {
- root->rb_node = Y;
- }
-
- /* link X and Y */
- Y->rb_left = X;
- X->rb_parent = Y;
-
- return;
-}
-
-NSTACK_STATIC void
-__rb_rotate_right (struct trp_rb_node *X, struct trp_rb_root *root)
-{
- /****************************
- * rotate Node X to right *
- ****************************/
-
- struct trp_rb_node *Y = X->rb_left;
-
- /* estblish X->Left link */
- X->rb_left = Y->rb_right;
- if (Y->rb_right != NULL)
- Y->rb_right->rb_parent = X;
-
- /* estblish Y->Parent link */
- Y->rb_parent = X->rb_parent;
- if (X->rb_parent)
- {
- if (X == X->rb_parent->rb_right)
- X->rb_parent->rb_right = Y;
- else
- X->rb_parent->rb_left = Y;
- }
- else
- {
- root->rb_node = Y;
- }
-
- /* link X and Y */
- Y->rb_right = X;
- X->rb_parent = Y;
-
- return;
-}
-
-/* X, Y are for application */
-NSTACK_STATIC void
-__rb_erase_color (struct trp_rb_node *X, struct trp_rb_node *Parent,
- struct trp_rb_root *root)
-{
- /*************************************
- * maintain red-black tree balance *
- * after deleting node X *
- *************************************/
-
- while (X != root->rb_node && (!X || X->color == RB_BLACK))
- {
-
- if (Parent == NULL)
- {
- break;
- }
-
- if (X == Parent->rb_left)
- {
- struct trp_rb_node *W = Parent->rb_right;
- if (W->color == RB_RED)
- {
- W->color = RB_BLACK;
- Parent->color = RB_RED; /* Parent != NIL? */
- __rb_rotate_left (Parent, root);
- W = Parent->rb_right;
- }
-
- if ((!W->rb_left || W->rb_left->color == RB_BLACK)
- && (!W->rb_right || W->rb_right->color == RB_BLACK))
- {
- W->color = RB_RED;
- X = Parent;
- Parent = X->rb_parent;
- }
- else
- {
- if (!W->rb_right || W->rb_right->color == RB_BLACK)
- {
- if (W->rb_left != NULL)
- W->rb_left->color = RB_BLACK;
- W->color = RB_RED;
- __rb_rotate_right (W, root);
- W = Parent->rb_right;
- }
-
- W->color = Parent->color;
- Parent->color = RB_BLACK;
- if (W->rb_right->color != RB_BLACK)
- {
- W->rb_right->color = RB_BLACK;
- }
- __rb_rotate_left (Parent, root);
- X = root->rb_node;
- break;
- }
- }
- else
- {
-
- struct trp_rb_node *W = Parent->rb_left;
- if (W->color == RB_RED)
- {
- W->color = RB_BLACK;
- Parent->color = RB_RED; /* Parent != NIL? */
- __rb_rotate_right (Parent, root);
- W = Parent->rb_left;
- }
-
- if ((!W->rb_left || (W->rb_left->color == RB_BLACK))
- && (!W->rb_right || (W->rb_right->color == RB_BLACK)))
- {
- W->color = RB_RED;
- X = Parent;
- Parent = X->rb_parent;
- }
- else
- {
- if (!W->rb_left || (W->rb_left->color == RB_BLACK))
- {
- if (W->rb_right != NULL)
- W->rb_right->color = RB_BLACK;
- W->color = RB_RED;
- __rb_rotate_left (W, root);
- W = Parent->rb_left;
- }
-
- W->color = Parent->color;
- Parent->color = RB_BLACK;
- if (W->rb_left->color != RB_BLACK)
- {
- W->rb_left->color = RB_BLACK;
- }
- __rb_rotate_right (Parent, root);
- X = root->rb_node;
- break;
- }
- }
- }
-
- if (X)
- {
- X->color = RB_BLACK;
- }
-
- return;
-}
-
-static void
-rb_insert_color (struct trp_rb_node *X, struct trp_rb_root *root)
-{
- /*************************************
- * maintain red-black tree balance *
- * after inserting node X *
- *************************************/
-
- /* check red-black properties */
- while (X != root->rb_node && X->rb_parent->color == RB_RED)
- {
- /* we have a violation */
- if (X->rb_parent == X->rb_parent->rb_parent->rb_left)
- {
- struct trp_rb_node *Y = X->rb_parent->rb_parent->rb_right;
- if (Y && Y->color == RB_RED)
- {
-
- /* uncle is red */
- X->rb_parent->color = RB_BLACK;
- Y->color = RB_BLACK;
- X->rb_parent->rb_parent->color = RB_RED;
- X = X->rb_parent->rb_parent;
- }
- else
- {
-
- /* uncle is black */
- if (X == X->rb_parent->rb_right)
- {
- /* make X a left child */
- X = X->rb_parent;
- __rb_rotate_left (X, root);
- }
-
- /* recolor and rotate */
- X->rb_parent->color = RB_BLACK;
- X->rb_parent->rb_parent->color = RB_RED;
- __rb_rotate_right (X->rb_parent->rb_parent, root);
- }
- }
- else
- {
-
- /* miror image of above code */
- struct trp_rb_node *Y = X->rb_parent->rb_parent->rb_left;
- if (Y && (Y->color == RB_RED))
- {
-
- /* uncle is red */
- X->rb_parent->color = RB_BLACK;
- Y->color = RB_BLACK;
- X->rb_parent->rb_parent->color = RB_RED;
- X = X->rb_parent->rb_parent;
- }
- else
- {
-
- /* uncle is black */
- if (X == X->rb_parent->rb_left)
- {
- X = X->rb_parent;
- __rb_rotate_right (X, root);
- }
- X->rb_parent->color = RB_BLACK;
- X->rb_parent->rb_parent->color = RB_RED;
- __rb_rotate_left (X->rb_parent->rb_parent, root);
- }
- }
- }
-
- root->rb_node->color = RB_BLACK;
-
- return;
-}
-
-static void
-rb_erase (struct trp_rb_node *node, struct trp_rb_root *root)
-{
- struct trp_rb_node *child, *parent;
- unsigned int color;
-
- if (!node->rb_left)
- {
- child = node->rb_right;
- }
- else if (!node->rb_right)
- {
- child = node->rb_left;
- }
- else
- {
- struct trp_rb_node *old = node, *left;
-
- node = node->rb_right;
- while ((left = node->rb_left) != NULL)
- {
- node = left;
- }
-
- if (old->rb_parent)
- {
- if (old->rb_parent->rb_left == old)
- {
- old->rb_parent->rb_left = node;
- }
- else
- {
- old->rb_parent->rb_right = node;
- }
- }
- else
- {
- root->rb_node = node;
- }
-
- child = node->rb_right;
- parent = node->rb_parent;
- color = node->color;
-
- if (parent == old)
- {
- parent = node;
- }
- else
- {
- if (child)
- {
- child->rb_parent = parent;
- }
-
- parent->rb_left = child;
-
- node->rb_right = old->rb_right;
- old->rb_right->rb_parent = node;
- }
-
- node->color = old->color;
- node->rb_parent = old->rb_parent;
- node->rb_left = old->rb_left;
- old->rb_left->rb_parent = node;
-
- if (color == RB_BLACK)
- {
- __rb_erase_color (child, parent, root);
- }
-
- return;
-
- }
-
- parent = node->rb_parent;
- color = node->color;
-
- if (child)
- {
- child->rb_parent = parent;
- }
-
- if (parent)
- {
- if (parent->rb_left == node)
- {
- parent->rb_left = child;
- }
- else
- {
- parent->rb_right = child;
- }
- }
- else
- {
- root->rb_node = child;
- }
-
- if (color == RB_BLACK)
- {
- __rb_erase_color (child, parent, root);
- }
-
- return;
-}
-
-NSTACK_STATIC trp_rb_node_t *
-rb_new_node (trp_key_t key, trp_data_t data,
- trp_rb_node_t * parent /*, key_compare key_compare_fn */ )
-{
- trp_rb_node_t *node = (trp_rb_node_t *) malloc (sizeof (trp_rb_node_t));
- if (!node)
- {
- return NULL;
- }
- node->key = key;
- node->data = data;
- node->rb_parent = parent;
- node->rb_left = node->rb_right = NULL;
- node->color = RB_RED;
- /*node->key_compare_fn = key_compare_fn; */
- return node;
-}
-
-int
-trp_rb_insert (trp_key_t key, trp_data_t data, trp_rb_root_t * root,
- key_compare key_compare_fn)
-{
- trp_rb_node_t *node = root->rb_node, *parent = NULL;
- int ret = 0; /* CID 24640 */
- while (node)
- {
- parent = node;
- ret = key_compare_fn (node->key, key);
- if (0 < ret)
- {
- node = node->rb_left;
- }
- else if (0 > ret)
- {
- node = node->rb_right;
- }
- else
- {
- return -1;
- }
- }
-
- node = rb_new_node (key, data, parent /*, key_compare_fn */ );
- if (!node)
- {
- return -1;
- }
-
- if (parent)
- {
- if (ret > 0)
- {
- parent->rb_left = node;
- }
- else
- {
- parent->rb_right = node;
- }
- }
- else
- {
- root->rb_node = node;
- }
-
- rb_insert_color (node, root);
- return 0;
-}
-
-int
-trp_rb_insert_allow_same_key (trp_key_t key, trp_data_t data,
- trp_rb_root_t * root,
- key_compare key_compare_fn)
-{
- trp_rb_node_t *node = root->rb_node, *parent = NULL;
- int ret = 0; /*CID 24638 */
- while (node)
- {
- parent = node;
- ret = key_compare_fn (node->key, key);
- if (0 < ret)
- {
- node = node->rb_left;
- }
- else
- {
- node = node->rb_right;
- }
- }
-
- node = rb_new_node (key, data, parent /*, key_compare_fn */ );
- if (!node)
- {
- return -1;
- }
-
- if (parent)
- {
- if (ret > 0)
- {
- parent->rb_left = node;
- }
- else
- {
- parent->rb_right = node;
- }
- }
- else
- {
- root->rb_node = node;
- }
-
- rb_insert_color (node, root);
- return 0;
-}
-
-NSTACK_STATIC trp_rb_node_t *
-trp_rb_search_inorder (trp_key_t key, trp_data_t data,
- trp_rb_node_t * node, int *count,
- key_compare key_compare_fn)
-{
- if (!node)
- {
- return NULL;
- }
-
- int ret = key_compare_fn (node->key, key);;
- if (0 == ret && data == node->data)
- {
- return node;
- }
-
- if ((NULL == count) || (0 >= --(*count)))
- {
- return NULL;
- }
-
- trp_rb_node_t *ret_node =
- trp_rb_search_inorder (key, data, node->rb_left, count, key_compare_fn);
- if (ret_node)
- {
- return ret_node;
- }
-
- ret_node =
- trp_rb_search_inorder (key, data, node->rb_right, count, key_compare_fn);
- return ret_node;
-}
-
-void
-trp_rb_erase_with_data (trp_key_t key, trp_data_t data, trp_rb_root_t * root,
- int count, key_compare key_compare_fn)
-{
- trp_rb_node_t *node;
- /* recursion operation need depth protect */
- if (!
- (node =
- trp_rb_search_inorder (key, data, root->rb_node, &count,
- key_compare_fn)))
- {
- return;
- }
-
- rb_erase (node, root);
- free (node);
- node = NULL;
-}
-
-void
-trp_rb_erase (trp_key_t key, trp_rb_root_t * root, key_compare key_compare_fn)
-{
- trp_rb_node_t *node;
- if (!(node = trp_rb_search (key, root, key_compare_fn)))
- {
- return;
- }
-
- rb_erase (node, root);
- free (node);
- node = NULL;
-}
diff --git a/stacks/lwip_stack/lwip_src/netif/ethernetif.c b/stacks/lwip_stack/lwip_src/netif/ethernetif.c
deleted file mode 100644
index 6a3e810..0000000
--- a/stacks/lwip_stack/lwip_src/netif/ethernetif.c
+++ /dev/null
@@ -1,167 +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 "spl_opt.h"
-
-#include "spl_def.h"
-#include "mem.h"
-#include "stackx/spl_pbuf.h"
-//#include <stackx/stats.h>
-//#include "sockets.h"
-#include <netinet/in.h>
-
-#include "stackx_spl_share.h"
-#include "stackx/spl_api.h"
-#include "lwip/etharp.h"
-
-#include <sc_dpdk.h>
-#include "sc_dpdk.h"
-
-#include "cpuid.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "spl_hal.h"
-#include "hal_api.h"
-
-#include "sys.h"
-
-#define IFNAME0 'e'
-#define IFNAME1 'n'
-
-struct ethernetif
-{
- struct eth_addr *ethaddr;
-
-};
-
-#if (DPDK_MODULE != 1)
-NSTACK_STATIC void
-low_level_init (struct netif *pnetif)
-{
- struct ether_addr eth_addr;
-
- struct netifExt *pnetifExt = NULL;
- NSPOL_LOGINF (NETIF_DEBUG, "low_level_init \n");
-
- pnetifExt = getNetifExt (pnetif->num);
- if (NULL == pnetifExt)
- return;
-
- hal_get_macaddr (pnetifExt->hdl, &eth_addr);
- NSPOL_LOGINF (SC_DPDK_INFO,
- "low_level_init: Port %s, MAC : %02X:%02X:%02X:%02X:%02X:%02X",
- pnetifExt->if_name, eth_addr.addr_bytes[0],
- eth_addr.addr_bytes[1], eth_addr.addr_bytes[2],
- eth_addr.addr_bytes[3], eth_addr.addr_bytes[4],
- eth_addr.addr_bytes[5]);
-
- pnetif->hwaddr_len = 6;
- pnetif->hwaddr[0] = eth_addr.addr_bytes[0]; //0x00;
- pnetif->hwaddr[1] = eth_addr.addr_bytes[1]; //0x1b;
- pnetif->hwaddr[2] = eth_addr.addr_bytes[2]; //0x21;
- pnetif->hwaddr[3] = eth_addr.addr_bytes[3]; //0x6b;
- pnetif->hwaddr[4] = eth_addr.addr_bytes[4]; //0x24;
- pnetif->hwaddr[5] = eth_addr.addr_bytes[5]; //0x40;
- pnetif->mtu = SPL_FRAME_MTU;
-
- /* don't set SPL_NETIF_FLAG_ETHARP if this device is not an ethernet one */
- pnetif->flags =
- NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;
- pnetif->flags |= NETIF_FLAG_IGMP;
-
-}
-#endif
-
-#if (DPDK_MODULE != 1)
-
-/**
- * Should be called at the beginning of the program to set up the
- * network interface. It calls the function low_level_init() to do the
- * actual setup of the hardware.
- *
- * This function should be passed as a parameter to spl_netif_add().
- *
- * @param netif the lwip network interface structure for this ethernetif
- * @return ERR_OK if the loopif is initialized
- * ERR_MEM if privatedata couldn't be allocated
- * any other err_t on error
- */
-err_t
-ethernetif_init (struct netif * pnetif)
-{
- struct ethernetif *eth_netif;
-
- if (NULL == pnetif)
- {
- NSPOL_LOGERR ("netif=NULL");
- return ERR_VAL;
- }
- NSPOL_LOGINF (NETIF_DEBUG, "ethernetif_init \n");
-
- eth_netif = (struct ethernetif *) malloc (sizeof (struct ethernetif));
- if (eth_netif == NULL)
- {
- NSPOL_LOGERR ("ethernetif_init: out of memory");
- return ERR_MEM;
- }
-
- pnetif->state = eth_netif;
- pnetif->name[0] = IFNAME0;
- pnetif->name[1] = IFNAME1;
-
- /* We directly use etharp_output() here to save a function call.
- * You can instead declare your own function an call etharp_output()
- * from it if you have to do some checks before sending (e.g. if link
- * is available...) */
- pnetif->output = etharp_output;
- pnetif->linkoutput = spl_hal_output;
-
- eth_netif->ethaddr = (struct eth_addr *) &(pnetif->hwaddr[0]);
-
- // Add extra netif information here
- if (0 != netifExt_add (pnetif))
- {
- return ERR_VAL;
- }
-
- /* initialize the hardware */
- low_level_init (pnetif);
- NSPOL_LOGINF (NETIF_DEBUG,
- "ethernetif_init complete ifname [%c][%c][%d] \n",
- pnetif->name[0], pnetif->name[1], pnetif->num);
-
- return ERR_OK;
-}
-
-void
-ethernetif_packets_input (struct netif *pstnetif)
-{
- struct spl_pbuf *p = NULL;
- spl_hal_input (pstnetif, &p);
-
- /* no packet could be read, silently ignore this */
- if (p != NULL
- && pstnetif->input (spl_convert_spl_pbuf_to_pbuf (p),
- pstnetif) != ERR_OK)
- {
- NSPOL_LOGERR ("netif->input failed]p=%p, netif=%p", p, pstnetif);
- }
-
- /* Free the spl pbuf */
- spl_pbuf_free (p);
-}
-#endif
-//#endif /* 0 */
diff --git a/stacks/lwip_stack/lwip_src/netif/sc_dpdk.c b/stacks/lwip_stack/lwip_src/netif/sc_dpdk.c
deleted file mode 100644
index 95f3eec..0000000
--- a/stacks/lwip_stack/lwip_src/netif/sc_dpdk.c
+++ /dev/null
@@ -1,574 +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 "sc_dpdk.h"
-#include "common_mem_mbuf.h"
-#include "netif/common.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "nsfw_msg_api.h"
-#include "nsfw_maintain_api.h"
-#include "nsfw_recycle_api.h"
-#include "stackx_app_res.h"
-#include "stackx_pbuf.h"
-#ifdef SYS_MEM_RES_STAT
-#include "memp.h"
-#endif
-#include "spl_instance.h"
-#ifdef HAL_LIB
-#else
-#include "rte_memzone.h"
-#endif
-
-#define SPL_MEM_MODULE "spl_mem_module"
-
-#define TMR_TICK_LENGTH TCP_TMR_INTERVAL /* define the tick length */
-
-u32_t uStackArgIndex = 0;
-int stackx_core_mask = 40;
-
-int g_nstack_bind_cpu = 0;
-int g_tcpip_thread_sleep_time = 0;
-
-extern int sbr_create_tx_pool ();
-extern int stackx_stat_zone_create ();
-
-#define GLOBAL_STACK_CORE_ARG "-c"
-#define GLOBAL_STACK_CORE_BINE "-bind_cpu"
-
-u32 g_type;
-struct memory_statics memory_used_size[80];
-
-void
-printmeminfo ()
-{
- unsigned int i = 0;
- long size = 0;
-
- NSPOL_LOGDBG (SC_DPDK_INFO,
- "*************************************************************");
- for (i = 0; i < g_type; i++)
- {
- NSPOL_LOGDBG (SC_DPDK_INFO, "%s : %ld", memory_used_size[i].name,
- memory_used_size[i].size);
- size += memory_used_size[i].size;
- }
-
- size += (g_type * sizeof (struct common_mem_memzone));
- NSPOL_LOGDBG (SC_DPDK_INFO, "total size %ld", size);
- NSPOL_LOGDBG (SC_DPDK_INFO,
- "*************************************************************");
-}
-
-void
-print_call_stack ()
-{
-}
-
-/* Parse the argument given in the command line of the application */
-void
-smp_parse_stack_args (int argc, char **argv)
-{
- int i = 0;
-
- const unsigned int global_core_length = 2; //GLOBAL_STACK_CORE_ARG "-c" string length is 2
-
- for (i = uStackArgIndex + 1; i < argc; i++)
- {
- if ((i + 1) < argc)
- {
- if (strncmp (argv[i], "-sleep", 6) == 0) //compare "-sleep" string, length is 6
- {
- g_tcpip_thread_sleep_time = atoi (argv[++i]);
- NSPOL_LOGDBG (SC_DPDK_INFO, "g_tcpip_thread_sleep_time=%d",
- g_tcpip_thread_sleep_time);
- continue;
- }
-
- if (strncmp (argv[i], GLOBAL_STACK_CORE_ARG, global_core_length) ==
- 0)
- {
- stackx_core_mask = atoi (argv[++i]);
- if (stackx_core_mask < 1)
- {
- NSPOL_LOGDBG (SC_DPDK_INFO,
- "Invalid Args:core_mask can't be less than 1,input value is:%s",
- argv[i]);
- }
-
- continue;
- }
-
- if (strncmp
- (argv[i], GLOBAL_STACK_CORE_BINE,
- sizeof (GLOBAL_STACK_CORE_BINE)) == 0)
- {
- if (argv[++i])
- {
- g_nstack_bind_cpu = atoi (argv[i]);
- }
-
- if (g_nstack_bind_cpu < 0)
- {
- g_nstack_bind_cpu = 0;
- }
-
- continue;
- }
- }
- else
- {
- NSPOL_LOGDBG (SC_DPDK_INFO, "Invalid args:%s miss value ", argv[i]); //now ,only support this format ,others maybe supported in future
- }
- }
-
- return;
-}
-
-mpool_handle
-create_tx_mbuf_pool ()
-{
- mpool_handle mbf_pool_handle = NULL;
-
- nsfw_mem_mbfpool mbuf_pool;
-
- mbuf_pool.stname.entype = NSFW_SHMEM;
- int retval =
- spl_snprintf (mbuf_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_mempoll_tx_name ());
- if (retval < 0)
- {
- NSPOL_LOGERR ("spl_snprintf failed");
- return NULL;
- }
-
- mbuf_pool.usnum = TX_MBUF_POOL_SIZE - 1;
- mbuf_pool.uscash_size = 0;
- mbuf_pool.uspriv_size = 0;
- mbuf_pool.usdata_room = TX_MBUF_MAX_LEN;
- mbuf_pool.isocket_id = SOCKET_ID_ANY;
- mbuf_pool.enmptype = NSFW_MRING_SPSC;
- mbf_pool_handle = nsfw_mem_mbfmp_create (&mbuf_pool);
- if (NULL == mbf_pool_handle)
- {
- NSPOL_LOGERR ("create_tx_mbuf_pool failed]name=%s, num=%u, room=%u",
- mbuf_pool.stname.aname, mbuf_pool.usnum,
- mbuf_pool.usdata_room);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "tx_mempool_malloc=%p, num=%u, room=%u, total_mem=%d",
- mbf_pool_handle, TX_MBUF_POOL_SIZE, mbuf_pool.usdata_room,
- nsfw_mem_get_len (mbf_pool_handle, NSFW_MEM_MBUF));
- DPDK_MEMORY_COUNT ((get_mempoll_tx_name ()),
- nsfw_mem_get_len (mbf_pool_handle, NSFW_MEM_MBUF));
- MEM_STAT (SPL_MEM_MODULE, "spl_mbuf_pool", NSFW_SHMEM,
- nsfw_mem_get_len (mbf_pool_handle, NSFW_MEM_MBUF));
-
- return mbf_pool_handle;
-}
-
-mring_handle
-create_segment_pool ()
-{
- nsfw_mem_sppool seg_pool;
- seg_pool.stname.entype = NSFW_SHMEM;
- int retval =
- spl_snprintf (seg_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_mempoll_seg_name ());
- if (retval < 0)
- {
- NSPOL_LOGERR ("spl_snprintf failed");
- return NULL;
- }
-
- seg_pool.usnum = 16;
- seg_pool.useltsize = sizeof (struct common_pcb);
- seg_pool.isocket_id = SOCKET_ID_ANY;
- seg_pool.enmptype = NSFW_MRING_SPSC;
-
- mring_handle seg_mp_handle = nsfw_mem_sp_create (&seg_pool);
- if (NULL == seg_mp_handle)
- {
- NSPOL_LOGERR
- ("create_segment_pool common failed]name=%s, num=%u, size=%u",
- seg_pool.stname.aname, SPL_MEMP_NUM_TCP_SEG, seg_pool.useltsize);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "common seg_mempool_malloc=%p, num=%u, size=%u, total_mem=%d",
- seg_mp_handle, SPL_MEMP_NUM_TCP_SEG, seg_pool.useltsize,
- nsfw_mem_get_len (seg_mp_handle, NSFW_MEM_SPOOL));
- DPDK_MEMORY_COUNT ((get_mempoll_seg_name ()),
- nsfw_mem_get_len (seg_mp_handle, NSFW_MEM_SPOOL));
- MEM_STAT (SPL_MEM_MODULE, "spl_seg_pool", NSFW_SHMEM,
- nsfw_mem_get_len (seg_mp_handle, NSFW_MEM_SPOOL));
- return seg_mp_handle;
-}
-
-mring_handle
-create_msg_pool ()
-{
- nsfw_mem_sppool msg_pool;
- msg_pool.stname.entype = NSFW_SHMEM;
- int retval =
- spl_snprintf (msg_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_mempoll_msg_name ());
- if (retval < 0)
- {
- NSPOL_LOGERR ("spl_snprintf fail");
- return NULL;
- }
-
- msg_pool.usnum = TX_MSG_POOL_SIZE;
- msg_pool.useltsize = sizeof (data_com_msg);
- msg_pool.isocket_id = SOCKET_ID_ANY;
- msg_pool.enmptype = NSFW_MRING_MPMC;
- mring_handle msg_mp_handle = nsfw_mem_sp_create (&msg_pool);
-
- if (NULL == msg_mp_handle)
- {
- NSPOL_LOGERR ("create_msg_pool failed]name=%s, num=%u, size=%u",
- msg_pool.stname.aname, TX_MSG_POOL_SIZE,
- msg_pool.useltsize);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "msg_pool_malloc=%p, num=%u, size=%u, total_mem=%d",
- msg_mp_handle, TX_MSG_POOL_SIZE, msg_pool.useltsize,
- nsfw_mem_get_len (msg_mp_handle, NSFW_MEM_SPOOL));
- DPDK_MEMORY_COUNT ((get_mempoll_msg_name ()),
- nsfw_mem_get_len (msg_mp_handle, NSFW_MEM_SPOOL));
- MEM_STAT (SPL_MEM_MODULE, "spl_msg_pool", NSFW_SHMEM,
- nsfw_mem_get_len (msg_mp_handle, NSFW_MEM_SPOOL));
- return msg_mp_handle;
-}
-
-mring_handle
-create_primary_box ()
-{
- nsfw_mem_mring mbox_pool;
- mbox_pool.stname.entype = NSFW_SHMEM;
- int retval =
- spl_snprintf (mbox_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_stackx_ring_name ());
- if (retval < 0)
- {
- NSPOL_LOGERR ("spl_snprintf failed");
- return NULL;
- }
-
- mbox_pool.usnum = MBOX_RING_SIZE - 1;
- mbox_pool.isocket_id = SOCKET_ID_ANY;
- mbox_pool.enmptype = NSFW_MRING_MPSC;
- mring_handle mbox_handle = nsfw_mem_ring_create (&mbox_pool);
- if (NULL == mbox_handle)
- {
- NSPOL_LOGERR ("create_primary_mbox failed]name=%s, num=%u",
- mbox_pool.stname.aname, mbox_pool.usnum + 1);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "primary_mbox_malloc=%p, num=%u, total_mem=%d",
- mbox_handle, MBOX_RING_SIZE,
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- DPDK_MEMORY_COUNT ((get_stackx_ring_name ()),
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- MEM_STAT (SPL_MEM_MODULE, "primary_mbox_ring", NSFW_SHMEM,
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- return mbox_handle;
-}
-
-mring_handle
-create_priority_box (u32 prio)
-{
- nsfw_mem_mring mbox_pool;
- mbox_pool.stname.entype = NSFW_SHMEM;
- int retval =
- spl_snprintf (mbox_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_stackx_priority_ring_name (prio));
- if (retval < 0)
- {
- NSPOL_LOGERR ("spl_snprintf failed");
- return NULL;
- }
-
- mbox_pool.usnum = MBOX_RING_SIZE - 1;
- mbox_pool.isocket_id = SOCKET_ID_ANY;
- mbox_pool.enmptype = NSFW_MRING_MPSC;
- mring_handle mbox_handle = nsfw_mem_ring_create (&mbox_pool);
- if (NULL == mbox_handle)
- {
- NSPOL_LOGERR ("Create priority mbox fail]name=%s, num=%u",
- mbox_pool.stname.aname, mbox_pool.usnum + 1);
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "prio=%u, mbox=%p, num=%u, total_mem=%d", prio,
- mbox_handle, MBOX_RING_SIZE,
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- DPDK_MEMORY_COUNT ((get_stackx_priority_ring_name (prio)),
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- MEM_STAT (SPL_MEM_MODULE, mbox_pool.stname.aname, NSFW_SHMEM,
- (nsfw_mem_get_len (mbox_handle, NSFW_MEM_RING)));
- return mbox_handle;
-
-}
-
-int
-init_instance ()
-{
- int ret;
- p_def_stack_instance =
- (stackx_instance *) malloc (sizeof (stackx_instance));
- if (NULL == p_def_stack_instance)
- {
- NSPOL_LOGERR ("malloc failed");
- return -1;
- }
-
- ret = MEMSET_S (p_def_stack_instance, sizeof (stackx_instance), 0,
- sizeof (stackx_instance));
- if (EOK != ret)
- {
- NSPOL_LOGERR ("MEMSET_S failed]ret=%d", ret);
- return -1;
- }
-
- p_def_stack_instance->rss_queue_id = 0;
- p_def_stack_instance->netif_list = NULL;
- p_def_stack_instance->mp_tx = create_tx_mbuf_pool ();
- if (!p_def_stack_instance->mp_tx)
- {
- return -1;
- }
-
- (void) spl_reg_res_tx_mgr (p_def_stack_instance->mp_tx); // will only return 0, no need to check return value
-
- /* Modified above code to hold common_pcb */
- p_def_stack_instance->cpcb_seg = create_segment_pool ();
- if (!p_def_stack_instance->cpcb_seg)
- {
- return -1;
- }
-
- p_def_stack_instance->lmsg_pool = create_msg_pool ();
- if (!p_def_stack_instance->lmsg_pool)
- {
- return -1;
- }
-
- mring_handle mbox_array[SPL_MSG_BOX_NUM] = { NULL };
- p_def_stack_instance->lstack.primary_mbox.llring = create_primary_box ();
- if (!p_def_stack_instance->lstack.primary_mbox.llring)
- {
- return -1;
- }
- mbox_array[0] = p_def_stack_instance->lstack.primary_mbox.llring;
-
- u32 m = 0;
- while (m < MSG_PRIO_QUEUE_NUM)
- {
- p_def_stack_instance->lstack.priority_mbox[m].llring =
- create_priority_box (m);
- if (!p_def_stack_instance->lstack.priority_mbox[m].llring)
- {
- return -1;
- }
- mbox_array[m + 1] =
- p_def_stack_instance->lstack.priority_mbox[m].llring;
- m++;
- }
-
- (void) spl_add_mbox (mbox_array, SPL_MSG_BOX_NUM);
-
- g_nsfw_rti_primary_stat = &p_def_stack_instance->lstat.primary_stat; //save to g_nsfw_rti_primary_stat(this is a SH addr)
- return 0;
-}
-
-void
-spl_free_msgs_in_box (mring_handle r)
-{
- i32 count = 0, i = 0;
-
- void **msgs = NULL;
- data_com_msg *m = NULL;
-
- while ((count = nsfw_mem_ring_dequeuev (r, msgs, 32)) > 0)
- {
- /* drop all of them */
- if (msgs == NULL)
- break;
-
- for (i = 0; i < count; i++)
- {
- m = (data_com_msg *) msgs[i];
- if (m->param.op_type == MSG_ASYN_POST)
- ASYNC_MSG_FREE (m);
- else
- SYNC_MSG_ACK (m);
- }
- }
-}
-
-inline int
-spl_msg_malloc (data_com_msg ** p_msg_entry)
-{
- mring_handle msg_pool = NULL;
- int rslt;
- stackx_instance *instance = p_def_stack_instance;
- msg_pool = instance->lmsg_pool;
- if (!msg_pool)
- {
- NSPOL_LOGERR ("msg_pool is NULL");
- return -1;
- }
-
- rslt = nsfw_mem_ring_dequeue (msg_pool, (void **) p_msg_entry);
- if ((rslt == 0) || (*p_msg_entry == NULL))
- {
- NSPOL_LOGERR ("failed to get msg from ring");
- return -1;
- }
-
- res_alloc (&(*p_msg_entry)->param.res_chk);
-
- (*p_msg_entry)->param.msg_from = msg_pool;
- (*p_msg_entry)->param.err = ERR_OK;
- return 0;
-}
-
-struct spl_pbuf *
-spl_mbuf_malloc (uint16_t len, spl_pbuf_type Type, u16_t * count)
-{
- struct common_mem_mbuf *mbuf = NULL;
- struct common_mem_mbuf *mbuf_first = NULL;
- struct common_mem_mbuf *mbuf_tail = NULL;
- struct spl_pbuf *buf = NULL;
- struct spl_pbuf *first = NULL;
- struct spl_pbuf *tail = NULL;
-
- mpool_handle mp = NULL;
-
- mp = p_def_stack_instance->mp_tx;
- if (mp == NULL)
- {
- return NULL; /*if mp is NULL when init app will Inform */
- }
-
- while (len > 0)
- {
- mbuf = (struct common_mem_mbuf *) nsfw_mem_mbf_alloc (mp, NSFW_SHMEM);
- if (unlikely (mbuf == NULL))
- {
- if (mbuf_first != NULL)
- {
- if (res_free
- (&
- (((struct spl_pbuf *) ((char *) mbuf_first +
- sizeof (struct
- common_mem_mbuf)))->res_chk)))
- {
- NSPOL_LOGERR ("res_free failed");
- }
- spl_mbuf_free (mbuf_first);
- }
-
- return NULL;
- }
-
- uint16_t alloc = TX_MBUF_MAX_LEN;
- if (len < TX_MBUF_MAX_LEN)
- {
- alloc = len;
- }
-
- (*count)++;
- mbuf->data_len = alloc;
- mbuf->next = NULL;
- buf =
- (struct spl_pbuf *) ((char *) mbuf + sizeof (struct common_mem_mbuf));
- res_alloc (&buf->res_chk);
-
- buf->next_a = 0;
- buf->payload_a = ADDR_LTOSH_EXT (common_pktmbuf_mtod (mbuf, void *));
- buf->tot_len = len;
- buf->len = alloc;
- buf->type = Type;
- buf->flags = 0;
-
- buf->freeNext = NULL;
-
- buf->conn_a = 0;
-
- if (first == NULL)
- {
- first = buf;
- mbuf_first = mbuf;
- tail = buf;
- mbuf_tail = mbuf;
- mbuf_first->nb_segs = 1;
- mbuf_first->pkt_len = alloc;
- }
- else
- {
- /* Already there is a check for the return value of rtp_pktmbuf_alloc,
- hence not an issue */
-
- tail->next_a = ADDR_LTOSH_EXT (buf);
- tail = buf;
-#ifdef HAL_LIB
-#else
- mbuf_tail->next = mbuf;
-#endif
- mbuf_tail = mbuf;
-
- mbuf_first->pkt_len = (mbuf_first->pkt_len + mbuf->data_len);
- mbuf_first->nb_segs++;
-
- }
-
- len -= alloc;
- }
-
- return first;
-}
-
-/*
- * Ring distribution function: protocol stack once a packet processing, so there is no use of bulk package
- * @param buf pbuf means * @param packet_inport the packet from which the port to enter, for the configuration table with the ip comparison
- * @ Protocol stack add location: ip.c-> ip_input () -> (if (netif == NULL) branch)
- * @ Return value: 0 for the send into * 0 for the transmission failed: send the original failure 1,
- * err = -20 did not match to the client, err = -1Ring full, overflow, will release the package
-*/
-
-inline void
-spl_mbuf_free (void *mbuf)
-{
- (void) nsfw_mem_mbf_free ((mbuf_handle) mbuf, NSFW_SHMEM);
-}
-
-inline uint16_t
-spl_mbuf_refcnt_update (void *mbuf, int16_t value)
-{
- common_mbuf_refcnt_set ((struct common_mem_mbuf *) mbuf,
- common_mbuf_refcnt_read ((struct common_mem_mbuf *)
- mbuf) + value);
- return 1;
-}
diff --git a/stacks/lwip_stack/lwip_src/netif/spl_hal.c b/stacks/lwip_stack/lwip_src/netif/spl_hal.c
deleted file mode 100644
index db843d4..0000000
--- a/stacks/lwip_stack/lwip_src/netif/spl_hal.c
+++ /dev/null
@@ -1,1774 +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_arch.h"
-#include "netif.h"
-#include "spl_sockets.h"
-//#include <netinet/in.h>
-
-#include "stackx_spl_share.h"
-#include "stackx_pbuf.h"
-#include "spl_api.h"
-#include "sharedmemory.h"
-//#include "nettool.h"
-#include "lwip/etharp.h"
-#include "ip_module_api.h"
-#include "sc_dpdk.h"
-#include "nstack_log.h"
-#include "common.h"
-#include "nstack_securec.h"
-//#include "ip.h"
-#include "configuration_reader.h"
-#include "spl_hal.h"
-#include "nsfw_maintain_api.h"
-#include "stackx_common.h"
-#include "spl_instance.h"
-#include <netinet/in.h>
-#include "prot/tcp.h"
-
-extern u32_t g_mbuf_size[MAX_THREAD_NUM];
-extern u32_t uStackArgIndex;
-extern void smp_parse_stack_args (int argc, char **argv);
-extern void spl_do_dump (struct spl_pbuf *p, u16 direction);
-
-#define SPL_HAL_SEND_TRY 100000
-
-#define SPL_HAL_MODULE "SPL_HAL_MODULE"
-extern u16_t g_offSetArry[SPL_PBUF_MAX_LAYER];
-
-/* structure to store the rx and tx packets. Put two per cache line as ports
- * used in pairs */
-struct port_stats
-{
- unsigned rx;
- unsigned tx;
- unsigned drop;
- u64_t rx_size;
- u64_t tx_size;
- u64_t recv_last_cycles;
- u64_t send_last_cycles;
-} __attribute__ ((aligned (COMMON_CACHE_LINE_SIZE / 2)));
-
-struct port_capa
-{
- u32_t tx_ipv4_cksum_offload;
- u32_t tx_udp_cksum_offload;
- u32_t tx_tcp_cksum_offload;
-};
-
-struct rx_pkts
-{
- u16_t num;
- u16_t index;
- struct common_mem_mbuf *pkts[PKT_BURST];
-};
-
-struct tx_pkts
-{
- u16_t num;
- struct common_mem_mbuf *pkts[PKT_BURST];
-};
-
-struct port_pkts
-{
- struct rx_pkts rx;
- struct tx_pkts tx;
-};
-
-struct psd_header
-{
- u32_t src_addr; /* IPaddress of source host. */
- u32_t dst_addr; /* IPaddress of destination host(s). */
- u8_t zero; /* zero. */
- u8_t proto; /* L4 protocol type. */
- u16_t len; /* L4 length. */
-} __attribute__ ((__packed__));
-
-NSTACK_STATIC unsigned num_ports_NIC = 0;
-NSTACK_STATIC unsigned num_ports_NIC_start = 0;
-
-struct stackx_port_info *head_used_port_list;
-struct stackx_port_zone *p_stackx_port_zone = NULL;
-
-struct bond_ports_info bond_ports_array = {.cnt = 0 };
-
-static u8_t bond_ports_array_cnt_start = 0;
-
-static struct port_capa spl_hal_capa = { 0 };
-
-static struct port_pkts spl_hal_pkts[HAL_MAX_NIC_NUM];
-
-NSTACK_STATIC inline u16_t
-get_ipv4_16b_sum (u16_t * ptr16, u32_t nr)
-{
- u32_t sum = 0;
-
- while (nr > 1)
- {
- sum += *ptr16;
- nr -= sizeof (u16_t);
- ptr16++;
-
- if (sum > UINT16_MAX)
- {
- sum -= UINT16_MAX;
- }
- }
-
- /* If length is in odd bytes */
- if (nr)
- {
- sum += *((u8_t *) ptr16);
- }
-
- sum = ((sum & 0xffff0000) >> 16) + (sum & 0xffff);
- sum &= 0x0ffff;
- return (u16_t) sum;
-}
-
-NSTACK_STATIC inline u16_t
-get_ipv4_bswap16 (u16_t x)
-{
- return (u16_t) (((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
-}
-
-NSTACK_STATIC inline u16_t
-get_ipv4_psd_sum (struct ip_hdr * iphdr, u64_t ol_flags)
-{
- struct psd_header psd_hdr;
-
- psd_hdr.src_addr = iphdr->src.addr;
- psd_hdr.dst_addr = iphdr->dest.addr;
- psd_hdr.zero = 0;
- psd_hdr.proto = iphdr->_proto;
-
- if (ol_flags & PKT_TX_TCP_SEG)
- {
- psd_hdr.len = 0;
- }
- else
- {
- psd_hdr.len = get_ipv4_bswap16 ((get_ipv4_bswap16 (iphdr->_len)
- - sizeof (struct ip_hdr)));
- }
-
- return get_ipv4_16b_sum ((u16_t *) & psd_hdr, sizeof (struct psd_header));
-}
-
-/* should be called after head_used_port_list is initialized */
-NSTACK_STATIC hal_hdl_t
-get_port_hdl_by_name (const char *name)
-{
- unsigned int i = 0;
- struct stackx_port_info *p = p_stackx_port_zone->stackx_one_port;
-
- while (i < p_stackx_port_zone->port_num)
- {
- if (!strncasecmp (p->linux_ip.if_name, name, strlen (name)))
- {
- return p->linux_ip.hdl;
- }
-
- p = &p_stackx_port_zone->stackx_one_port[++i];
- }
-
- NSPOL_LOGERR ("failed to find port id]name=%s", name);
- return hal_get_invalid_hdl ();
-}
-
-NSTACK_STATIC struct stackx_port_info *
-get_port_info_by_name (const char *name)
-{
- struct stackx_port_info *p = p_stackx_port_zone->stackx_one_port;
- unsigned int i = 0;
-
- while (i < p_stackx_port_zone->port_num)
- {
- if (!strncasecmp (p->linux_ip.if_name, name, strlen (name)))
- {
- return p;
- }
-
- p = &p_stackx_port_zone->stackx_one_port[++i];
- }
-
- return NULL;
-}
-
-NSTACK_STATIC int
-del_port_in_port_list (const char *name)
-{
- struct stackx_port_info *inf = head_used_port_list;
- struct stackx_port_info *prev = NULL;
-
- while (inf)
- {
- if (!strncasecmp (inf->linux_ip.if_name, name, strlen (name)))
- {
- if (prev != NULL)
- {
- prev->next_use_port = inf->next_use_port;
- }
- else
- {
- head_used_port_list = inf->next_use_port;
- }
-
- break;
- }
-
- prev = inf;
- inf = inf->next_use_port;
- }
-
- return 0;
-}
-
-extern void create_netif (struct stackx_port_info *p_port_info);
-
-NSTACK_STATIC int
-add_port_in_port_list (struct stackx_port_info *p)
-{
- char *name;
- struct stackx_port_info *inf = head_used_port_list;
- struct stackx_port_info *prev = NULL;
-
- name = p->linux_ip.if_name;
-
- while (inf)
- {
- if (!strncasecmp (inf->linux_ip.if_name, name, strlen (name)))
- {
- NSPOL_LOGERR ("ERROR: add an existing port!");
- return -1;
- }
-
- prev = inf;
- inf = inf->next_use_port;
- }
-
- if (prev == NULL)
- {
- head_used_port_list = p;
- }
- else
- {
- prev->next_use_port = p;
- }
-
- p->next_use_port = NULL;
- create_netif (p);
- return 0;
-}
-
-/* Queries the link status of a port and prints it to screen */
-NSTACK_STATIC void
-report_port_link_status (struct stackx_port_info *p)
-{
- /* get link status */
- u32 status;
-
- status = hal_link_status (p->linux_ip.hdl);
-
- if (status)
- {
- NSPOL_LOGINF (SC_DPDK_INFO, "Port=%s: Link Up", p->linux_ip.if_name);
- }
- else
- {
- NSPOL_LOGINF (SC_DPDK_INFO, "Port=%s: Link Down", p->linux_ip.if_name);
- }
-}
-
-int
-spl_hal_ether_etoa (const unsigned char *e, int e_len, char *a, int a_len)
-{
- char *c = a;
- int i;
- int retVal;
-
- if (!e || !a || e_len < 0)
- return -1;
-
- if (e_len > NETIF_ETH_ADDR_LEN)
- e_len = NETIF_ETH_ADDR_LEN;
-
- if (a_len < e_len * 3)
- return -1;
-
- for (i = 0; i < e_len; i++)
- {
- if (i)
- {
- *c++ = ':';
- }
- retVal = SPRINTF_S (c, a_len - (c - a), "%02x", e[i] & 0xff);
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("SPRINTF_S failed]ret=%d.", retVal);
- return -1;
- }
- c = c + retVal;
- }
-
- return 0;
-}
-
-NSTACK_STATIC inline void
-spl_hal_buf_convert (struct common_mem_mbuf *mbuf, struct spl_pbuf **buf)
-{
- struct common_mem_mbuf *before = NULL;
- struct spl_pbuf *last = NULL;
- struct spl_pbuf *first = NULL;
- struct spl_pbuf *tmp = NULL;
-
- while (mbuf != NULL)
- {
- //dpdk 2.1
- tmp =
- (struct spl_pbuf *) ((char *) mbuf + sizeof (struct common_mem_mbuf));
- res_alloc (&tmp->res_chk);
- tmp->payload = common_pktmbuf_mtod (mbuf, void *);
- tmp->tot_len = mbuf->pkt_len;
- tmp->len = mbuf->data_len;
- tmp->type = SPL_PBUF_HUGE;
- tmp->proto_type = SPL_PBUF_PROTO_NONE;
- tmp->next = NULL;
- tmp->flags = 0;
-
- if (first == NULL)
- {
- first = tmp;
- last = first;
- }
- else
- {
- /* Always the "if(first == NULL)" code segment is executed and then
- "else" segment code is executed, so the "last" variable is not
- NULL always when "else" case is executed */
- last->next = tmp;
- last = tmp;
- }
-
- before = mbuf;
- mbuf = mbuf->next;
-
- before->next = NULL;
- }
-
- *buf = first;
-}
-
-NSTACK_STATIC int
-spl_hal_port_zone_init ()
-{
- int retVal;
- nsfw_mem_zone create_port_zone;
- nsfw_mem_zone create_port_info;
- struct stackx_port_info *mz_port_info;
- INITPOL_LOGINF ("HAL", "spl_hal_port_zone_init", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_START);
-
- if ((CUR_CFG_HAL_PORT_NUM < 1)
- || (SIZE_MAX / sizeof (struct stackx_port_info) < CUR_CFG_HAL_PORT_NUM))
- {
- NSPOL_LOGERR ("malloc parameter incorrect]max_linux_port=%u",
- CUR_CFG_HAL_PORT_NUM);
- return -1;
- }
-
- if (spl_snprintf
- (create_port_zone.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- MP_STACKX_PORT_ZONE) < 0)
- {
- NSPOL_LOGERR ("spl_snprintf fail");
-
- return -1;
- }
-
- create_port_zone.stname.entype = NSFW_SHMEM;
- create_port_zone.isocket_id = SOCKET_ID_ANY;
- create_port_zone.length = sizeof (struct stackx_port_zone);
- create_port_zone.ireserv = 0;
- p_stackx_port_zone =
- (struct stackx_port_zone *) nsfw_mem_zone_create (&create_port_zone);
-
- if (NULL == p_stackx_port_zone)
- {
- INITPOL_LOGERR ("HAL", "spl_hal_port_zone_init",
- "Cannot create memory zone for MP_STACKX_PORT_ZONE information",
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
- common_exit (EXIT_FAILURE,
- "Cannot create memory zone for MP_STACKX_PORT_ZONE information");
- }
-
- retVal =
- MEMSET_S (p_stackx_port_zone, sizeof (struct stackx_port_zone), 0,
- sizeof (struct stackx_port_zone));
-
- if (EOK != retVal)
- {
- INITPOL_LOGERR ("HAL", "spl_hal_port_zone_init", "MEMSET_S return fail",
- retVal, MODULE_INIT_FAIL);
- nsfw_mem_zone_release (&create_port_zone.stname);
- return -1;
- }
-
- if (spl_snprintf
- (create_port_info.stname.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- MP_STACKX_PORT_INFO) < 0)
- {
- NSPOL_LOGERR ("VSNPRINTF_S fail");
- return -1;
- }
-
- create_port_info.stname.entype = NSFW_SHMEM;
- create_port_info.isocket_id = SOCKET_ID_ANY;
- create_port_info.length =
- CUR_CFG_HAL_PORT_NUM * sizeof (struct stackx_port_info);
- create_port_info.ireserv = 0;
- mz_port_info =
- (struct stackx_port_info *) nsfw_mem_zone_create (&create_port_info);
-
- if (NULL == mz_port_info)
- {
- INITPOL_LOGERR ("HAL", "spl_hal_port_zone_init",
- "Cannot create memory zone for MP_STACKX_PORT_INFO information",
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
- common_exit (EXIT_FAILURE,
- "Cannot create memory zone for MP_STACKX_PORT_INFO information");
- }
-
- retVal =
- MEMSET_S (mz_port_info, create_port_info.length, 0,
- create_port_info.length);
-
- if (EOK != retVal)
- {
- INITPOL_LOGERR ("HAL", "spl_hal_port_zone_init", "MEMSET_S return fail",
- retVal, MODULE_INIT_FAIL);
- nsfw_mem_zone_release (&create_port_info.stname);
- nsfw_mem_zone_release (&create_port_zone.stname);
- return -1;
- }
-
- MEM_STAT (SPL_HAL_MODULE, create_port_zone.stname.aname, NSFW_SHMEM,
- create_port_info.length);
-
- p_stackx_port_zone->stackx_one_port = mz_port_info;
-
- INITPOL_LOGINF ("HAL", "spl_hal_port_zone_init", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_SUCCESS);
-
- return 0;
-}
-
-int
-spl_hal_init (int argc, char *argv[])
-{
- int retval = -1;
- int idx_init;
-
- NSPOL_LOGINF (SC_DPDK_INFO, "spl_hal_init start");
-
- /* Get nstack args */
- smp_parse_stack_args (argc, argv);
-
- if (0 == uStackArgIndex)
- {
- NSPOL_LOGERR ("uStackArgIndex is 0, can lead to long loop]");
- return retval;
- }
-
- /* Init DPDK */
- argc = uStackArgIndex--;
- INITPOL_LOGINF ("HAL", "hal_init_global", NULL_STRING, LOG_INVALID_VALUE,
- MODULE_INIT_START);
-
- for (idx_init = 0; idx_init < argc; idx_init++)
- {
- NSPOL_LOGINF (SC_DPDK_INFO,
- "hal_init_global]idx_init=%d,argv[idx_init]=%s", idx_init,
- argv[idx_init]);
- }
-
- retval = hal_init_global (argc, argv);
-
- if (0 != retval)
- {
- NSPOL_LOGERR ("call hal_init_global fail]retval = %d", retval);
- return -1;
- }
-
- retval = hal_init_local ();
-
- if (0 != retval)
- {
- NSPOL_LOGERR ("call hal_init_local fail]retval = %d", retval);
- return -1;
- }
-
- retval = spl_hal_port_zone_init ();
- if (0 != retval)
- {
- NSPOL_LOGERR ("call hal_init_local fail]retval = %d", retval);
- return -1;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "Finished Process Init");
-
- return 0;
-
-}
-
-static inline int
-spl_hal_rx_mbuf_free (void *data, void *arg)
-{
- struct spl_pbuf *tmp = NULL;
- struct common_mem_mbuf *mbuf = (struct common_mem_mbuf *) data;
- (void) arg;
-
- tmp = (struct spl_pbuf *) ((char *) mbuf + sizeof (struct common_mem_mbuf));
- if (tmp->res_chk.alloc_flag == TRUE)
- return 1;
-
- if (common_mbuf_refcnt_read (mbuf) == 0)
- return 1;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "rx_pool init in fault case: free mbuf=%p",
- mbuf);
- spl_mbuf_free (mbuf);
- return 0;
-}
-
-struct common_mem_mempool *
-spl_hal_rx_pool_create (int nic_id, int queue_id, int start_type)
-{
- int retval;
- struct common_mem_mempool *mp;
- nsfw_mem_mbfpool create_mbuf_pool;
- nsfw_mem_name lookup_mbuf_pool;
- struct common_mem_ring *ring;
-
- if (start_type == 1)
- {
- create_mbuf_pool.stname.entype = NSFW_SHMEM;
- create_mbuf_pool.uscash_size = 0;
- create_mbuf_pool.uspriv_size = 0;
- create_mbuf_pool.isocket_id = SOCKET_ID_ANY;
- create_mbuf_pool.enmptype = NSFW_MRING_SPSC;
-
- retval =
- spl_snprintf (create_mbuf_pool.stname.aname, NSFW_MEM_NAME_LENGTH - 1,
- "%s", get_mempoll_rx_name (queue_id, nic_id));
-
- if (-1 == retval)
- {
- NSPOL_LOGERR ("spl_snprintf fail");
- return NULL;
- }
-
- create_mbuf_pool.usnum = RX_MBUF_POOL_SIZE - 1;
- /*performance, rx buf cap is special, ((size - HEADROOM) >> 10) <<10, see ixgbe_dev_rx_init;
- if want cap size == TX_MBUF_MAX_LEN, must let data_root=TX_MBUF_MAX_LEN+COMMON_PKTMBUF_HEADROOM and
- TX_MBUF_MAX_LEN must N*1024;
- */
- create_mbuf_pool.usdata_room =
- TX_MBUF_MAX_LEN + COMMON_PKTMBUF_HEADROOM;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "hal_rx_pool.usnum=%u, usdata_room=%u",
- create_mbuf_pool.usnum, create_mbuf_pool.usdata_room);
-
- mp =
- (struct common_mem_mempool *)
- nsfw_mem_mbfmp_create (&create_mbuf_pool);
-
- if (mp == NULL)
- {
- NSPOL_LOGERR ("nsfw_mem_mbfmp_create fail");
- return NULL;
- }
-
- MEM_STAT (SPL_HAL_MODULE, create_mbuf_pool.stname.aname, NSFW_SHMEM,
- nsfw_mem_get_len (mp, NSFW_MEM_MBUF));
- NSPOL_LOGDBG (SC_DPDK_INFO, "create:thread=%d,nic_id=%d,mp=%p,size=%d",
- queue_id, nic_id, mp, nsfw_mem_get_len (mp,
- NSFW_MEM_MBUF));
-
- char rx_msg_arr_name[NSFW_MEM_NAME_LENGTH];
- data_com_msg *rx_msg_array = NULL;
- retval = spl_snprintf (rx_msg_arr_name, NSFW_MEM_NAME_LENGTH, "%s",
- get_mempoll_rxmsg_name (queue_id, nic_id));
-
- if (-1 != retval)
- {
- rx_msg_array = (data_com_msg *) sbr_create_mzone (rx_msg_arr_name,
- (size_t)
- sizeof
- (data_com_msg) *
- RX_MBUF_POOL_SIZE);
- }
-
- if (!rx_msg_array)
- {
- NSSBR_LOGERR
- ("Create rx_msg_array zone fail]name=%s, num=%u, size=%zu",
- rx_msg_arr_name, RX_MBUF_POOL_SIZE,
- (size_t) sizeof (data_com_msg) * RX_MBUF_POOL_SIZE);
- }
- else
- {
- /*bind msg to pbuf */
- MEM_STAT (SPL_HAL_MODULE, rx_msg_arr_name, NSFW_SHMEM,
- (size_t) sizeof (data_com_msg) * RX_MBUF_POOL_SIZE);
- NSSBR_LOGINF
- ("Create rx_msg_array zone ok]name=%s, ptr=%p, num=%u, size=%zu",
- rx_msg_arr_name, rx_msg_array, RX_MBUF_POOL_SIZE,
- sizeof (data_com_msg) * RX_MBUF_POOL_SIZE);
-
- struct common_mem_mbuf *mbuf = NULL;
- struct spl_pbuf *buf = NULL;
- u32 loop = 0;
-
- for (; loop < RX_MBUF_POOL_SIZE; loop++)
- {
- mbuf = nsfw_mem_mbf_alloc (mp, NSFW_SHMEM);
-
- if (!mbuf)
- {
- /* alloc failed , still can work, no prebind success just not so faster */
- NSSBR_LOGERR
- ("nsfw_mem_mbf_alloc failed,this can not happen");
- break;
- }
-
- buf =
- (struct spl_pbuf *) ((char *) mbuf +
- sizeof (struct common_mem_mbuf));
- sys_sem_init (&rx_msg_array[loop].param.op_completed);
- rx_msg_array[loop].param.msg_from = NULL;
- buf->msg = (void *) &rx_msg_array[loop];
- (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)
- {
- /* free failed , still can work, no prebind work just not so faster */
- NSSBR_LOGERR
- ("nsfw_mem_mbf_free failed,this can not happen");
- break;
- }
- }
-
- }
-
- }
- else
- {
- retval =
- spl_snprintf (lookup_mbuf_pool.aname, NSFW_MEM_NAME_LENGTH - 1, "%s",
- get_mempoll_rx_name (queue_id, nic_id));
-
- if (-1 == retval)
- {
- NSPOL_LOGERR ("spl_snprintf fail");
- return NULL;
- }
-
- lookup_mbuf_pool.entype = NSFW_SHMEM;
- lookup_mbuf_pool.enowner = NSFW_PROC_MAIN;
- mp =
- (struct common_mem_mempool *)
- nsfw_mem_mbfmp_lookup (&lookup_mbuf_pool);
-
- if (mp == NULL)
- {
- NSPOL_LOGERR ("nsfw_mem_mbfmp_lookup fail, name=%s, try to create",
- lookup_mbuf_pool.aname);
- return spl_hal_rx_pool_create (nic_id, queue_id, 1);
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "lookup:thread=%d,nic_id=%d,mp=%p,size=%d",
- queue_id, nic_id, mp, nsfw_mem_get_len (mp,
- NSFW_MEM_MBUF));
-
- /*We have to recycle RX mbufs hold by DPDK when fault recovering of upgrading nstack */
- if (start_type == 3 || start_type == 2)
- {
- ring = (struct common_mem_ring *) (mp->pool_data);
- NSPOL_LOGINF (SC_DPDK_INFO,
- "BEFORE clear rx_mpool]prod.head=%u, prod.tail=%u, "
- "cons.head=%u, cons.tail=%u", ring->prod.head,
- ring->prod.tail, ring->cons.head, ring->cons.tail);
-
- if (nsfw_mem_mbuf_iterator (mp, 0, mp->size,
- spl_hal_rx_mbuf_free, NULL) < 0)
- {
- NSPOL_LOGERR ("nsfw_mem_mbuf_iterator return fail");
- return NULL;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "AFTER clear rx_mpool]prod.head=%u, prod.tail=%u, "
- "cons.head=%u, cons.tail=%u", ring->prod.head,
- ring->prod.tail, ring->cons.head, ring->cons.tail);
- }
-
- }
-
- return mp;
-
-}
-
-int
-spl_hal_bond_config (struct network_configuration *network)
-{
- struct phy_net *phynet = network->phy_net;
- struct ref_nic *phead = phynet->header;
- static u8_t bond_index = 0; /* for auto-generating bond_name */
- unsigned int check_bond = 0, check_name;
- int retVal;
- u8_t j, k, idx = 0;
-
- /* get bond info from network configuration */
- if (phynet->bond_mode != -1 && bond_ports_array.cnt < MAX_BOND_PORT_NUM)
- {
- struct ref_nic *phead_bond = phead;
- char *name = phynet->bond_name;
- struct bond_set *s = &bond_ports_array.ports[bond_ports_array.cnt];
-
- while (phead_bond != NULL)
- {
- /* check slave name, repeated slave nic cannot be added to bond set. */
- check_name = 0;
-
- for (j = 0; j < idx; j++)
- {
- if (strcmp (s->slave_ports[j], phead_bond->nic_name) == 0)
- {
- check_name = 1;
- break;
- }
- }
-
- if (check_name)
- {
- break;
- }
-
- /* if this nic has been added to a bond_set, ignore it */
- check_bond = 0;
-
- for (k = 0; k < bond_ports_array.cnt && !check_bond; k++)
- {
- for (j = 0;
- j < bond_ports_array.ports[k].slave_port_cnt
- && !check_bond; j++)
- {
- if (strcmp
- (bond_ports_array.ports[k].slave_ports[j],
- phead_bond->nic_name) == 0)
- {
- check_bond = 1;
-
- if (name[0] == 0)
- {
- retVal =
- STRNCPY_S (name, IP_MODULE_MAX_NAME_LEN,
- bond_ports_array.
- ports[k].bond_port_name,
- strlen (bond_ports_array.
- ports[k].bond_port_name));
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRNCPY_S failed]ret=%d.",
- retVal);
- return -1;
- }
- }
-
- if (strcmp
- (name,
- bond_ports_array.ports[k].bond_port_name) != 0)
- {
- NSOPR_SET_ERRINFO (-1, "%s init failed!\n", name);
- NSPOL_LOGERR
- ("%s init failed! %s in both %s and %s", name,
- phead_bond->nic_name, name,
- bond_ports_array.ports[k].bond_port_name);
- return -1;
- }
- }
- }
- }
-
- if (check_bond == 1)
- {
- break;
- }
-
- /* copy slave ports name to bond array */
- retVal =
- STRNCPY_S (s->slave_ports[idx], HAL_MAX_NIC_NAME_LEN,
- phead_bond->nic_name, strlen (phead_bond->nic_name));
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRNCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- idx++;
- phead_bond = phead_bond->next;
-
- if (idx >= HAL_MAX_SLAVES_PER_BOND)
- {
- break;
- }
- }
-
- if (check_bond == 0)
- {
- if (name[0] == 0)
- {
- /* if bond_name is a empty string, generate a new bond name */
- retVal =
- SPRINTF_S (name, HAL_MAX_NIC_NAME_LEN, "bond%u_auto",
- bond_index++);
-
- if (-1 == retVal)
- {
- NSPOL_LOGERR ("SPRINTF_S failed]ret=%d.", retVal);
- return -1;
- }
- }
-
- /* copy bond_name to bond array */
- retVal =
- STRNCPY_S (s->bond_port_name, HAL_MAX_NIC_NAME_LEN, name,
- strlen (name));
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRNCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- s->slave_port_cnt = idx;
- bond_ports_array.cnt++;
- NSPOL_LOGINF (SC_DPDK_INFO,
- "bond_ports_array.cnt=%u,slave_port_cnt=%u",
- bond_ports_array.cnt, s->slave_port_cnt);
- }
- }
-
- return 0;
-}
-
-int
-spl_hal_port_config (unsigned int *port_num)
-{
- int retVal;
- unsigned int check;
- struct phy_net *phynet;
-
- struct network_configuration *network = get_network_list ();
-
- if (!network)
- {
- NSPOL_LOGERR ("fail to get_provider_node");
- return -1;
- }
-
- unsigned int port_index = p_stackx_port_zone->port_num;
-
- while (network && (phynet = network->phy_net))
- {
- struct ref_nic *phead = phynet->header;
- NSPOL_LOGINF (SC_DPDK_INFO, "network=%p,network_name=%s", network,
- network->network_name);
-
- if (spl_hal_bond_config (network) < 0)
- {
- NSPOL_LOGERR ("spl_hal_bond_config fail.");
- return -1;
- }
-
- while (phead != NULL)
- {
- /* check if the NIC is inited */
- for (check = 0; check < port_index; ++check)
- {
- if (strcmp
- (p_stackx_port_zone->stackx_one_port[check].
- linux_ip.if_name, phead->nic_name) == 0)
- {
- break;
- }
- }
-
- if (check != port_index)
- {
- phead = phead->next;
- continue;
- }
-
- /* check if the number of VF exceeds MAX_VF_NUM */
- if (port_index >= MAX_VF_NUM + p_stackx_port_zone->bonded_port_num)
- {
- NSOPR_SET_ERRINFO (-1, "Support Only %d VF. %s init failed!\n",
- MAX_VF_NUM, phead->nic_name);
- NSPOL_LOGERR ("Support Only %d VF. %s init failed!", MAX_VF_NUM,
- phead->nic_name);
- NSOPR_SET_ERRINFO (-1, "Add network %s failed!\n",
- network->network_name);
- break;
- }
-
- if (strlen (phead->nic_name) >=
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_name) - 1
- || strlen (phead->nic_name) <= 3)
- {
- NSPOL_LOGERR ("Invalid configuration");
- return -1;
- }
-
- retVal =
- STRCPY_S (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_name,
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_name),
- phead->nic_name);
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "if_name %s",
- p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_name);
-
- retVal =
- STRCPY_S (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_type,
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_type),
- network->nic_type_name);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("strcpy_s failed]ret=%d.", retVal);
- return -1;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "if_type %s",
- p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.if_type);
-
- retVal =
- STRCPY_S (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.ip_addr_linux,
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.
- ip_addr_linux), "0.0.0.0");
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- retVal =
- STRCPY_S (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.mask_linux,
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.
- mask_linux), "0.0.0.0");
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- retVal =
- STRCPY_S (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.bcast_linux,
- sizeof (p_stackx_port_zone->
- stackx_one_port[port_index].linux_ip.
- bcast_linux), "0.0.0.0");
-
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d.", retVal);
- return -1;
- }
-
- ++port_index;
- NSPOL_LOGINF (SC_DPDK_INFO, "port_index=%u", port_index);
-
- if (CUR_CFG_HAL_PORT_NUM <= port_index + bond_ports_array.cnt)
- {
- // TODO: Invalid configuration received, return immediately
- NSPOL_LOGERR
- ("Insufficient nStack configuration when compared to configuration from network.json");
- return -1;
- }
-
- /* [TA33636] [2017-04-11] Do not need provider.json */
- if (phynet->bond_mode ==
- -1 /*&& strncmp(network->network_name, "provider", 8) != 0 */ )
- {
- break;
- }
- else
- {
- phead = phead->next;
- }
- }
-
- network = network->next;
- }
-
- *port_num = port_index;
-
- return ERR_OK;
-}
-
-void
-spl_hal_capa_init ()
-{
- u32_t ipv4_cksum_offload = 1;
- u32_t udp_cksum_offload = 1;
- u32_t tcp_cksum_offload = 1;
- hal_netif_capa_t info = { 0 };
- struct stackx_port_info *p_port_info = head_used_port_list;
-
- while (p_port_info)
- {
- hal_get_capability (p_port_info->linux_ip.hdl, &info);
-
- if ((info.tx_offload_capa & HAL_ETH_TX_OFFLOAD_IPV4_CKSUM) == 0)
- {
- ipv4_cksum_offload = 0;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "Port %s TX_OFFLOAD_IPV4_CKSUM Disable",
- p_port_info->linux_ip.if_name);
- }
-
- if ((info.tx_offload_capa & HAL_ETH_TX_OFFLOAD_UDP_CKSUM) == 0)
- {
- udp_cksum_offload = 0;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "Port %s TX_OFFLOAD_UDP_CKSUM Disable",
- p_port_info->linux_ip.if_name);
- }
-
- if ((info.tx_offload_capa & HAL_ETH_TX_OFFLOAD_TCP_CKSUM) == 0)
- {
- tcp_cksum_offload = 0;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "Port %s TX_OFFLOAD_TCP_CKSUM Disable",
- p_port_info->linux_ip.if_name);
- }
-
- p_port_info = p_port_info->next_use_port;
- }
-
- spl_hal_capa.tx_ipv4_cksum_offload = ipv4_cksum_offload;
- spl_hal_capa.tx_udp_cksum_offload = udp_cksum_offload;
- spl_hal_capa.tx_tcp_cksum_offload = tcp_cksum_offload;
-
- NSPOL_LOGINF (SC_DPDK_INFO,
- "ipv4_cksum_offload(%u),udp_cksum_offload(%u),tcp_cksum_offload(%u)",
- ipv4_cksum_offload, udp_cksum_offload, tcp_cksum_offload);
-
-}
-
-NSTACK_STATIC void
-spl_hal_bond_info_init (hal_hdl_t hdl, struct bond_set *s,
- struct stackx_port_info *p)
-{
-#define MAX_MAC_STR_LEN 20
- char mac_string[MAX_MAC_STR_LEN];
- int retVal;
- struct ether_addr addr;
-
- p->linux_ip.hdl = hdl;
-
- struct stackx_port_info *slave_port;
- slave_port = get_port_info_by_name (s->slave_ports[0]);
-
- if (slave_port == NULL)
- {
- NSPOL_LOGERR ("get_port_info_by_name failed]bond_port_name=%s",
- s->bond_port_name);
- return;
- }
-
- /* check the lenght of bond_port_name */
- retVal =
- STRCPY_S (p->linux_ip.if_name, sizeof (p->linux_ip.if_name),
- s->bond_port_name);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return;
- }
-
- hal_get_macaddr (hdl, &addr);
- retVal =
- spl_hal_ether_etoa (addr.addr_bytes, sizeof (addr.addr_bytes), mac_string,
- sizeof (mac_string));
- if (retVal < 0)
- {
- NSPOL_LOGERR ("spl_hal_ether_etoa failed]ret=%d", retVal);
- return;
- }
-
- retVal =
- STRCPY_S (p->linux_ip.mac_addr, sizeof (p->linux_ip.mac_addr),
- mac_string);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return;
- }
-
- retVal =
- STRCPY_S (p->linux_ip.ip_addr_linux, sizeof (p->linux_ip.ip_addr_linux),
- slave_port->linux_ip.ip_addr_linux);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return;
- }
-
- retVal =
- STRCPY_S (p->linux_ip.mask_linux, sizeof (p->linux_ip.mask_linux),
- slave_port->linux_ip.mask_linux);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return;
- }
-
- retVal =
- STRCPY_S (p->linux_ip.bcast_linux, sizeof (p->linux_ip.bcast_linux),
- slave_port->linux_ip.bcast_linux);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return;
- }
-
- NSPOL_LOGINF (SC_DPDK_INFO, "===== the bond port info ======");
- NSPOL_LOGINF (SC_DPDK_INFO, "bond port name=%s", p->linux_ip.if_name);
- NSPOL_LOGINF (SC_DPDK_INFO, "bond port mac=%s", p->linux_ip.mac_addr);
- NSPOL_LOGINF (SC_DPDK_INFO, "bond port ip=%s", p->linux_ip.ip_addr_linux);
- NSPOL_LOGINF (SC_DPDK_INFO, "bond port netmask=%s", p->linux_ip.mask_linux);
- NSPOL_LOGINF (SC_DPDK_INFO, "bond port broad_cast addr=%s",
- p->linux_ip.bcast_linux);
-
-}
-
-NSTACK_STATIC int
-spl_hal_bond_start (void)
-{
- u8_t i, j = 0;
- struct stackx_port_info *bond_port = NULL;
- hal_hdl_t hdl;
- hal_hdl_t slave_hdl[HAL_MAX_SLAVES_PER_BOND];
-
- NSPOL_LOGINF (SC_DPDK_INFO, "bond_ports_array.cnt=%u",
- bond_ports_array.cnt);
-
- for (i = bond_ports_array_cnt_start; i < bond_ports_array.cnt; i++)
- {
- struct bond_set *s = &bond_ports_array.ports[i];
- NSPOL_LOGINF (SC_DPDK_INFO, "i=%u,bond_port_name=%s", i,
- s->bond_port_name);
-
- u8_t slave_num = 0;
- for (j = 0; j < s->slave_port_cnt; j++)
- {
- NSPOL_LOGINF (SC_DPDK_INFO, "s->slave_ports[%u]=%s", j,
- s->slave_ports[j]);
- hdl = get_port_hdl_by_name (s->slave_ports[j]);
-
- if (!hal_is_valid (hdl))
- {
- continue;
- }
-
- slave_hdl[slave_num++] = hdl;
-
- /* here we didn't release the port mem allocated in p_stackx_port_zone */
- del_port_in_port_list (s->slave_ports[j]);
- }
-
- hdl = hal_bond (s->bond_port_name, slave_num, slave_hdl);
-
- if (!hal_is_valid (hdl))
- {
- NSPOL_LOGERR ("hal_bond fail: bond_name =%s", s->bond_port_name);
- return -1;
- }
-
- bond_port =
- &p_stackx_port_zone->stackx_one_port[p_stackx_port_zone->port_num];
- num_ports_NIC++;
- p_stackx_port_zone->port_num++;
- p_stackx_port_zone->bonded_port_num++;
-
- spl_hal_bond_info_init (hdl, s, bond_port);
- add_port_in_port_list (bond_port);
-
- }
-
- bond_ports_array_cnt_start = bond_ports_array.cnt;
- return 0;
-}
-
-/*
- * Initialises a given port using global settings and with the rx buffers
- * coming from the mbuf_pool passed as parameter
- */
-
-NSTACK_STATIC inline int
-spl_hal_port_start (uint16_t nic_id, struct stackx_port_info *p_port_info,
- u16_t num_queues)
-{
- u16_t num_queues_request, q;
- hal_hdl_t hdl;
- struct common_mem_mempool *mp;
- hal_netif_config_t conf;
-#define MAX_MAC_STR_LEN 20
- char mac_string[MAX_MAC_STR_LEN];
- int retVal;
- struct ether_addr addr;
-
- // change the queues number per configuration.
- // even we only receive packets from one rx queue when dispatch mode is on, the tx queue
- // shoule set to the queues number requested.
- num_queues_request = num_queues;
- if (num_queues_request > HAL_ETH_MAX_QUEUE_NUM)
- {
- NSPOL_LOGERR
- ("no enougth queue num for thread!]num_queues_request=%u,MAX_QUEUE_NUM=%u",
- num_queues_request, HAL_ETH_MAX_QUEUE_NUM);
- return -1;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "# Initialising index=%s... ",
- p_port_info->linux_ip.if_name);
- /* used to have fflush,no use code ,remove it. */
-
- conf.bit.hw_vlan_filter = 1;
- conf.bit.hw_vlan_strip = 1;
-
- conf.rx.queue_num = num_queues_request;
- conf.tx.queue_num = num_queues_request;
-
- for (q = 0; q < num_queues_request; q++)
- {
- mp =
- (struct common_mem_mempool *) spl_hal_rx_pool_create (nic_id, q, 1);
-
- if (mp == NULL)
- {
- NSPOL_LOGERR
- ("spl_hal_rx_pool_create fail]mp=NULL,nic_id=%u,if_name=%s",
- nic_id, p_port_info->linux_ip.if_name);
- return -1;
- }
-
- (void) spl_reg_res_txrx_mgr ((mpool_handle *) mp); // will only return 0, no need to check return value
- conf.rx.ring_pool[q] = mp;
- conf.rx.ring_size[q] = HAL_RX_RING_SIZE;
- conf.tx.ring_size[q] = HAL_TX_RING_SIZE;
- }
-
- hdl =
- hal_create (p_port_info->linux_ip.if_name, p_port_info->linux_ip.if_type,
- &conf);
-
- if (!hal_is_valid (hdl))
- {
- NSPOL_LOGERR ("hal_create fail]if_name =%s",
- p_port_info->linux_ip.if_name);
- return -1;
- }
-
- p_port_info->linux_ip.hdl = hdl;
-
- /* add mac address */
- hal_get_macaddr (hdl, &addr);
- retVal =
- spl_hal_ether_etoa (addr.addr_bytes, sizeof (addr.addr_bytes), mac_string,
- sizeof (mac_string));
- if (retVal < 0)
- {
- NSPOL_LOGERR ("spl_hal_ether_etoa failed]ret=%d", retVal);
- return -1;
- }
-
- retVal =
- STRCPY_S (p_port_info->linux_ip.mac_addr,
- sizeof (p_port_info->linux_ip.mac_addr), mac_string);
- if (EOK != retVal)
- {
- NSPOL_LOGERR ("STRCPY_S failed]ret=%d", retVal);
- return -1;
- }
-
- return 0;
-}
-
-NSTACK_STATIC int
-spl_hal_port_setup ()
-{
- unsigned int i;
- struct stackx_port_info *p_port_info = NULL;
-
- INITPOL_LOGINF ("HAL", "spl_hal_port_setup", NULL_STRING, LOG_INVALID_VALUE,
- MODULE_INIT_START);
-
- for (i = num_ports_NIC_start; i < num_ports_NIC; i++)
- {
- p_port_info = &(p_stackx_port_zone->stackx_one_port[i]);
-
- if (spl_hal_port_start (i, p_port_info, (u16_t) 1) < 0)
- {
- NSPOL_LOGERR ("Error initialising]nic_id=%u", i);
-
- INITPOL_LOGERR ("HAL", "spl_hal_port_setup", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
-
- return -1;
- }
- else
- {
- report_port_link_status (p_port_info);
- add_port_in_port_list (p_port_info);
- }
- }
-
- if (spl_hal_bond_start () < 0)
- {
- NSPOL_LOGERR ("bond port init failed!");
-
- INITPOL_LOGERR ("HAL", "spl_hal_port_setup", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
-
- return -1;
- }
-
- spl_hal_capa_init ();
-
- INITPOL_LOGINF ("HAL", "spl_hal_port_setup", NULL_STRING, LOG_INVALID_VALUE,
- MODULE_INIT_SUCCESS);
-
- return 0;
-
-}
-
-int
-spl_hal_port_init ()
-{
- int retval;
- unsigned int i, port_num = 0;
-
- int port_num_start = p_stackx_port_zone->port_num;
- num_ports_NIC_start = num_ports_NIC;
-
- //Read network info
- INITPOL_LOGINF ("IP", "spl_hal_port_config", NULL_STRING, LOG_INVALID_VALUE,
- MODULE_INIT_START);
- retval = spl_hal_port_config (&port_num);
-
- if (retval != ERR_OK)
- {
- INITPOL_LOGERR ("IP", "spl_hal_port_config", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
- return -1;
- }
-
- p_stackx_port_zone->port_num = port_num;
-
- NSPOL_LOGINF (SC_DPDK_INFO, "port_num=%u", port_num);
- INITPOL_LOGINF ("IP", "spl_hal_port_config", NULL_STRING, LOG_INVALID_VALUE,
- MODULE_INIT_SUCCESS);
-
- if (port_num_start == p_stackx_port_zone->port_num)
- {
- NSPOL_LOGERR ("No new NIC find.");
- return 0;
- }
-
- //Get ports num
- for (i = port_num_start; i < p_stackx_port_zone->port_num; i++)
- {
- if (p_stackx_port_zone->stackx_one_port[i].linux_ip.if_name[0] != 0)
- {
- /* right now hard coded, */
- int eth_num =
- atoi (p_stackx_port_zone->stackx_one_port[i].linux_ip.if_name +
- 3);
-
- num_ports_NIC++;
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "port_mask=%d ,eth_name=%s", eth_num,
- p_stackx_port_zone->stackx_one_port[i].
- linux_ip.if_name);
- }
- }
-
- if (num_ports_NIC > HAL_MAX_NIC_NUM)
- {
- NSPOL_LOGERR ("just support one eth");
- common_exit (EXIT_FAILURE, "just surport one eth");
- }
-
- if (num_ports_NIC == num_ports_NIC_start)
- {
- NSPOL_LOGERR ("No new NIC find.");
- return 0;
- }
-
- retval = spl_hal_port_setup ();
-
- if (retval == -1)
- {
- return -1;
- }
-
- NSPOL_LOGDBG (SC_DPDK_INFO, "Finished Process Init.");
-
- return 1;
-}
-
-inline NSTACK_STATIC void
-spl_hal_send (struct netif *pnetif)
-{
- u16_t i, sent = 0;
- struct netifExt *pnetifExt = NULL;
- u16_t netif_id = pnetif->num;
- u16_t tx_num = spl_hal_pkts[netif_id].tx.num;
- struct common_mem_mbuf **tx_ptks = spl_hal_pkts[netif_id].tx.pkts;
-
- for (i = 0; i < tx_num; i++)
- {
- (void)
- res_free (&
- (((struct spl_pbuf *) (((char *) tx_ptks[i]) +
- sizeof (struct
- common_mem_mbuf)))->res_chk));
- }
-
- int _retry = 0;
-
- pnetifExt = getNetifExt (pnetif->num);
- if (NULL == pnetifExt)
- return;
-
- do
- {
- sent +=
- hal_send_packet (pnetifExt->hdl, 0, (hal_mbuf_t **) & (tx_ptks[sent]),
- tx_num - sent);
- _retry++;
-
- if (_retry > SPL_HAL_SEND_TRY)
- {
- NSPOL_LOGERR ("send loop %d times but dpdk send data fail ",
- SPL_HAL_SEND_TRY);
- break;
- }
- }
- while (unlikely (sent != tx_num));
-
- if (unlikely (sent != tx_num))
- {
- for (i = sent; i < tx_num; i++)
- {
- (void) nsfw_mem_mbf_free ((mbuf_handle) (tx_ptks[i]), NSFW_SHMEM);
- }
- }
- for (i = 0; i < tx_num; i++)
- {
- /* set dpdk_send flag */
- ((struct spl_pbuf *) (((char *) tx_ptks[i]) +
- sizeof (struct common_mem_mbuf)))->
- res_chk.u8Reserve |= DPDK_SEND_FLAG;
- }
-
- spl_hal_pkts[netif_id].tx.num = 0;
-
-}
-
-inline u16_t
-spl_hal_recv (struct netif *pnetif, u8_t id)
-{
- u16_t netif_id, rx_c = 0;
- struct netifExt *pnetifExt = NULL;
-
- netif_id = pnetif->num;
-
- pnetifExt = getNetifExt (pnetif->num);
- if (NULL == pnetifExt)
- return 0;
-
- rx_c =
- hal_recv_packet (pnetifExt->hdl, 0,
- (hal_mbuf_t **) spl_hal_pkts[netif_id].rx.pkts,
- PKT_BURST);
-
- if (rx_c <= 0)
- {
- return 0;
- }
-
- spl_hal_pkts[netif_id].rx.num = rx_c;
- spl_hal_pkts[netif_id].rx.index = 0;
-
- return rx_c;
-}
-
-/*needflush set 1 has pbuf release problem, ref maybe set 0 before release*/
-NSTACK_STATIC inline void
-spl_hal_set_cksum (struct spl_pbuf *buf, struct common_mem_mbuf *mbuf)
-{
-
- //need to be careful, special when small packet oversize
- if (buf->tot_len > mbuf->pkt_len)
- {
- NSPOL_LOGWAR (SC_DPDK_INFO,
- "small packet OVERSIZE]pbuf_len=%u,mbuf_len=%u", buf->len,
- mbuf->pkt_len);
- mbuf->pkt_len = buf->len;
- }
-
- if (!spl_hal_tx_ip_cksum_enable () || !spl_hal_tx_tcp_cksum_enable ()
- || !spl_hal_tx_udp_cksum_enable ())
- {
- struct tcp_hdr *t_hdr;
- struct udp_hdr *u_hdr;
- u16_t flag_offset;
- u64_t ol_flags = (mbuf->ol_flags); //& (~PKT_TX_L4_MASK));
-
- struct eth_hdr *ethhdr = (struct eth_hdr *) ((char *) buf->payload);
-
- if (ethhdr->type == 8)
- {
- struct ip_hdr *iphdr =
- (struct ip_hdr *) ((char *) buf->payload +
- sizeof (struct eth_hdr));
-
- if (!spl_hal_tx_ip_cksum_enable ())
- {
- ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CKSUM;
- iphdr->_chksum = 0;
- }
-
- flag_offset = spl_ntohs (iphdr->_offset);
-
- /*ip frag, only the first packet has udp or tcp head */
- if (0 == (flag_offset & IP_OFFMASK))
- {
- switch (iphdr->_proto)
- {
- case IPPROTO_TCP:
- if (!spl_hal_tx_tcp_cksum_enable ())
- {
- t_hdr =
- (struct tcp_hdr *) ((char *) buf->payload +
- sizeof (struct eth_hdr) +
- sizeof (struct ip_hdr));
- t_hdr->chksum = get_ipv4_psd_sum (iphdr, ol_flags);
- ol_flags |= PKT_TX_TCP_CKSUM;
- }
-
- break;
-
- case IPPROTO_UDP:
- {
- if ((mbuf->ol_flags & PKT_TX_UDP_CKSUM) ==
- PKT_TX_UDP_CKSUM)
- {
- u_hdr = (struct udp_hdr *) ((char *) buf->payload + sizeof (struct eth_hdr) + sizeof (struct ip_hdr)); //l2_len + l3_len);
- u_hdr->chksum =
- get_ipv4_psd_sum (iphdr, mbuf->ol_flags);
- }
- }
-
- break;
-
- default:
-
- break;
- }
- }
- mbuf->l2_len = sizeof (struct eth_hdr); //l2_len;
- mbuf->l3_len = sizeof (struct ip_hdr);
- mbuf->ol_flags = ol_flags;
- }
- }
-}
-
-/*needflush set 1 has pbuf release problem, ref maybe set 0 before release*/
-err_t
-spl_hal_output (struct netif *pnetif, struct pbuf *buf)
-{
- u16_t netif_id, idx;
- struct common_mem_mbuf *mbuf;
- struct spl_pbuf *spbuf = NULL;
- //spl_pbuf_layer layer = SPL_PBUF_TRANSPORT;
- //u16_t offset;
-
- if (!p_def_stack_instance)
- {
- NSPOL_LOGERR ("p_def_stack_instance is NULL");
- return -1;
- }
-
- u16_t proc_id = spl_get_lcore_id ();
-
- NSPOL_LOGINF (SC_DPDK_INFO, "spl_hal_output. len %d totlen %d", buf->len,
- buf->tot_len);
- print_pbuf_payload_info (buf, true);
-
- if (buf->tot_len > DEF_MBUF_DATA_SIZE)
- {
- NSPOL_LOGINF (TCP_DEBUG, "spl_pbuf_alloc_hugepage Failed!!!");
- return ERR_MEM;
-
- }
- spbuf = spl_pbuf_alloc_hugepage (SPL_PBUF_RAW,
- buf->tot_len,
- SPL_PBUF_HUGE, proc_id, NULL);
-
- if (!spbuf)
- {
- NSPOL_LOGINF (TCP_DEBUG, "spl_pbuf_alloc_hugepage Failed!!!");
- return ERR_MEM;
- }
-
- if (ERR_OK != pbuf_to_splpbuf_copy (spbuf, buf))
- {
- NSPOL_LOGERR ("pbuf to splpbuf copy failed");
- return -1;
- }
-
- mbuf =
- (struct common_mem_mbuf *) ((char *) spbuf -
- sizeof (struct common_mem_mbuf));
-
- if (spbuf->tot_len > mbuf->pkt_len)
- {
- NSPOL_LOGWAR (SC_DPDK_INFO,
- "small packet OVERSIZE]pbuf_len=%u,mbuf_len=%u",
- spbuf->len, mbuf->pkt_len);
- mbuf->pkt_len = spbuf->len;
- }
-
- spl_hal_set_cksum (spbuf, mbuf);
-
- netif_id = pnetif->num;
- idx = spl_hal_pkts[netif_id].tx.num++;
- spl_hal_pkts[netif_id].tx.pkts[idx] = mbuf;
- spl_do_dump (spbuf, DUMP_SEND);
- spl_hal_send (pnetif);
-
- return 0;
-}
-
-void
-spl_hal_input (struct netif *pnetif, struct spl_pbuf **buf)
-{
- u16_t netif_id;
-
- struct common_mem_mbuf *mbuf;
-
- netif_id = pnetif->num;
-
- if (likely
- (spl_hal_pkts[netif_id].rx.num > spl_hal_pkts[netif_id].rx.index))
- {
- mbuf = spl_hal_pkts[netif_id].rx.pkts[spl_hal_pkts[netif_id].rx.index];
- spl_hal_pkts[netif_id].rx.index++;
- spl_hal_buf_convert (mbuf, buf);
- spl_do_dump (*buf, DUMP_RECV);
- }
- else
- {
- NSPOL_LOGERR
- ("recv from spl_dev has a problem]pnetif=%p, num=%u, index=%u",
- pnetif, spl_hal_pkts[netif_id].rx.num,
- spl_hal_pkts[netif_id].rx.index);
- *buf = NULL;
- }
- return;
-}
-
-int
-spl_hal_tx_ip_cksum_enable ()
-{
- return !spl_hal_capa.tx_ipv4_cksum_offload;
-}
-
-int
-spl_hal_tx_udp_cksum_enable ()
-{
- return !spl_hal_capa.tx_udp_cksum_offload;
-}
-
-int
-spl_hal_tx_tcp_cksum_enable ()
-{
- return !spl_hal_capa.tx_tcp_cksum_offload;
-}
-
-u32
-spl_hal_is_nic_exist (const char *name)
-{
- return hal_is_nic_exist (name);
-}
-
-int
-spl_hal_is_bond_netif (struct netif *pnetif)
-{
- int i;
- struct bond_set *s;
- struct netifExt *pnetifExt = NULL;
-
- pnetifExt = getNetifExt (pnetif->num);
- if (NULL == pnetifExt)
- return 0;
-
- for (i = 0; i < bond_ports_array.cnt; i++)
- {
- s = &bond_ports_array.ports[i];
- if (!strncmp
- (pnetifExt->if_name, s->bond_port_name, HAL_MAX_NIC_NAME_LEN))
- {
- return 1;
- }
- }
-
- return 0;
-}
diff --git a/stacks/lwip_stack/lwip_src/recycle/stackx_recycle.c b/stacks/lwip_stack/lwip_src/recycle/stackx_recycle.c
deleted file mode 100644
index addc0e6..0000000
--- a/stacks/lwip_stack/lwip_src/recycle/stackx_recycle.c
+++ /dev/null
@@ -1,676 +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_spl_share.h"
-#include "nsfw_recycle_api.h"
-#include "nstack_log.h"
-#include "nsfw_msg_api.h"
-#include "stackx_socket.h"
-#include "stackx_spl_msg.h"
-#include "stackx_app_res.h"
-#include "common.h"
-#include "sc_dpdk.h"
-#include "nsfw_mt_config.h"
-#include "spl_instance.h"
-
-#define SS_DELAY_CLOSE_SEC 5
-
-extern struct stackx_port_zone *p_stackx_port_zone;
-
-/*****************************************************************************
-* Prototype : sbr_recycle_rx_mbuf
-* Description : iterator and free rx mbufs with pid flags, when the app
- with certain pid is no longer exist
-* Input : void *data
-* void *arg
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_recycle_rx_mbuf (void *data, void *arg)
-{
- u32 *recycle_flg;
- pid_t *pid = (pid_t *) arg;
- struct common_mem_mbuf *m_buf = (struct common_mem_mbuf *) data;
-#ifdef HAL_LIB
-#else
- recycle_flg =
- (u32 *) ((char *) (m_buf->buf_addr) + RTE_PKTMBUF_HEADROOM -
- sizeof (u32));
-#endif
- if (m_buf->refcnt > 0 && *recycle_flg == *pid)
- {
- NSSBR_LOGDBG ("free rx mbuf hold by app], mbuf=%p", m_buf);
- *recycle_flg = MBUF_UNUSED;
- spl_mbuf_free (m_buf);
- }
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_recycle_rx_pool
-* Description : recycle rx mbufs hold by app when app crahes
-* Input : pid_t pid
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-sbr_recycle_rx_pool (pid_t pid)
-{
- static struct common_mem_mempool *rx_pool[MAX_VF_NUM * 2][MAX_THREAD_NUM] =
- { {0} };
- struct common_mem_mempool *mp;
- nsfw_mem_name lookup_mbuf_pool;
- u32 nic_id, queue_id = 0;
- int retval;
- struct common_mem_ring *ring;
-
- for (nic_id = 0;
- nic_id < p_stackx_port_zone->port_num && nic_id < MAX_VF_NUM * 2;
- nic_id++)
- {
- mp = rx_pool[nic_id][queue_id];
- if (mp == NULL)
- {
- retval =
- spl_snprintf (lookup_mbuf_pool.aname, NSFW_MEM_NAME_LENGTH - 1,
- "%s", get_mempoll_rx_name (queue_id, nic_id));
- if (-1 == retval)
- {
- NSPOL_LOGERR ("spl_snprintf fail");
- break;
- }
-
- lookup_mbuf_pool.entype = NSFW_SHMEM;
- lookup_mbuf_pool.enowner = NSFW_PROC_MAIN;
- mp =
- (struct common_mem_mempool *)
- nsfw_mem_mbfmp_lookup (&lookup_mbuf_pool);
- if (mp == NULL)
- break;
- rx_pool[nic_id][queue_id] = mp;
- }
- if (nsfw_mem_mbuf_iterator
- (mp, 0, mp->size, sbr_recycle_rx_mbuf, (void *) &pid) < 0)
- {
- NSSBR_LOGERR ("nsfw_mem_mbuf_iterator return fail");
- return -1;
- }
- ring = (struct common_mem_ring *) (mp->pool_data);
- NSSBR_LOGINF
- ("after recycling rx pbuf hold by app]ring=%p,prod.head=%u,prod.tail=%u,"
- "cons.head=%u,cons.tail=%u.", ring, ring->prod.head, ring->prod.tail,
- ring->cons.head, ring->cons.tail);
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_recycle_rx_pool
-* Description : recycle stackx tx mbufs hold by app when app crahes
-* Input : pid_t pid
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-sbr_recycle_tx_pool (pid_t pid)
-{
- struct common_mem_mempool *mp;
- struct common_mem_ring *ring;
-
- /* Try to free all the RX mbufs which are holded in stackx TX pool */
- mp = (struct common_mem_mempool *) p_def_stack_instance->mp_tx;
- if (mp == NULL)
- return -1;
-
- if (nsfw_mem_mbuf_iterator
- (mp, 0, mp->size, sbr_recycle_rx_mbuf, (void *) &pid) < 0)
- {
- NSSBR_LOGERR ("nsfw_mem_mbuf_iterator return fail");
- return -1;
- }
- ring = (struct common_mem_ring *) (mp->pool_data);
- NSSBR_LOGINF
- ("after recycling stackx tx pbuf hold by app]ring=%p,prod.head=%u,prod.tail=%u,"
- "cons.head=%u,cons.tail=%u.", ring, ring->prod.head, ring->prod.tail,
- ring->cons.head, ring->cons.tail);
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : ss_free_del_conn_msg
-* Description : free msg
-* Input : msg_delete_netconn *dmsg
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_free_del_conn_msg (msg_delete_netconn * dmsg)
-{
- data_com_msg *msg = (data_com_msg *) ((char *) dmsg - MAX_MSG_PARAM_SIZE);
-
- if (MSG_ASYN_POST == msg->param.op_type) /* should check type for linger */
- {
- msg_free (msg);
- }
-}
-
-extern int nsep_recycle_ep (u32 pid);
-
-/*****************************************************************************
-* Prototype : ss_recycle_done
-* Description : recycle done,need recycle ep and rx pool
-* Input : pid_t pid
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_recycle_done (pid_t pid)
-{
- spl_free_tx_pool (pid);
- spl_recycle_msg_pool (pid);
- (void) sbr_recycle_rx_pool (pid);
- (void) sbr_recycle_tx_pool (pid);
- (void) nsep_recycle_ep (pid);
- (void) nsfw_recycle_obj_end (pid);
-}
-
-/*****************************************************************************
-* Prototype : ss_notify_omc
-* Description : try to notify omc
-* Input : spl_netconn_t** conn_array
-* u32 conn_num
-* u8 notify_omc
-* pid_t pid
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_notify_omc (spl_netconn_t ** conn_array, u32 conn_num, u8 notify_omc,
- pid_t pid)
-{
- if (notify_omc)
- {
- u32 i;
- for (i = 0; i < conn_num; ++i)
- {
- struct spl_netconn *conn = conn_array[i];
- if (ss_is_pid_exist (conn, pid))
- {
- NSSBR_LOGINF ("there are still conn at work]pid=%d", pid);
- break;
- }
-
- msg_delete_netconn *delay_msg = conn->recycle.delay_msg;
- if (delay_msg && (delay_msg->pid == pid))
- {
- delay_msg->notify_omc = notify_omc;
- NSSBR_LOGINF ("there are still conn at delay]pid=%d", pid);
- break;
- }
- }
-
- if (conn_num == i)
- {
- NSSBR_LOGINF ("recycle done,notify omc]pid=%d", pid);
- ss_recycle_done (pid);
- }
- }
-}
-
-extern void do_pbuf_free (struct spl_pbuf *buf);
-
-static void
-ss_recycle_fd_share (sbr_fd_share * fd_share)
-{
- /* to free pbufs which are attached to sbr_fd_share */
- if (fd_share->recoder.head)
- {
- struct spl_pbuf *buf = fd_share->recoder.head;
- fd_share->recoder.head = NULL;
- fd_share->recoder.tail = NULL;
- fd_share->recoder.totalLen = 0;
- do_pbuf_free (buf);
- }
-}
-
-extern void nsep_recycle_epfd (void *epinfo, u32 pid);
-extern void tcp_free_accept_ring (spl_netconn_t * conn);
-extern void free_conn_by_spl (spl_netconn_t * conn);
-extern void tcp_drop_conn (spl_netconn_t * conn);
-
-/*****************************************************************************
-* Prototype : ss_close_conn_now
-* Description : close netconn now
-* Input : spl_netconn_t *conn
-* msg_delete_netconn *dmsg
-* pid_t pid
-* ss_close_conn_fun close_conn
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_close_conn_now (spl_netconn_t * conn, msg_delete_netconn * dmsg, pid_t pid,
- ss_close_conn_fun close_conn)
-{
- spl_netconn_t **conn_array = conn->recycle.group->conn_array;
- u32 conn_num = conn->recycle.group->conn_num;
- u8 notify_omc = dmsg->notify_omc;
-
- close_conn (dmsg, 0);
-
- nsep_recycle_epfd (conn->epInfo, pid);
- conn->epInfo = NULL; /*must be set to NULL */
-
- u32 i;
- if (conn->recycle.is_listen_conn)
- {
- /* drop the conn inside the accept ring */
- tcp_free_accept_ring (conn);
-
- /* app coredump and accept_from not changed, need recyle */
- for (i = 0; i < conn_num; ++i)
- {
- struct spl_netconn *accept_conn = conn_array[i];
- if ((accept_conn->recycle.accept_from == conn)
- && ss_is_pid_array_empty (accept_conn))
- {
- NSSBR_LOGINF
- ("recycle lost conn]listen_conn=%p,listen_private_data=%p,accept_conn=%p,accept_private_data=%p,pid=%d",
- conn, conn->private_data, accept_conn,
- accept_conn->private_data, pid);
- data_com_msg *msg =
- (data_com_msg *) ((char *) dmsg - MAX_MSG_PARAM_SIZE);
- msg->param.receiver = ss_get_recv_obj (accept_conn);
- dmsg->buf = NULL;
- dmsg->time_started = sys_now ();
- dmsg->shut = 0;
- dmsg->conn = accept_conn;
- close_conn (dmsg, 0);
-
- nsep_recycle_epfd (accept_conn->epInfo, pid);
- accept_conn->epInfo = NULL; /*must be set to NULL */
-
- /* lost conn need drop first, can't just free conn */
- tcp_drop_conn (accept_conn);
- }
- }
- }
-
- if (SS_DELAY_STOPPED == conn->recycle.delay_flag)
- {
- sbr_fd_share *fd_share =
- (sbr_fd_share *) ((char *) conn + SS_NETCONN_SIZE);
- ss_recycle_fd_share (fd_share);
- free_conn_by_spl (conn);
- }
-
- ss_free_del_conn_msg (dmsg);
- ss_notify_omc (conn_array, conn_num, notify_omc, pid);
-}
-
-/*****************************************************************************
-* Prototype : ss_close_conn_delay
-* Description : delay to close conn
-* Input : spl_netconn_t *conn
-* pid_t pid
-* msg_delete_netconn *dmsg
-* ss_close_conn_fun close_conn
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_close_conn_delay (spl_netconn_t * conn, pid_t pid,
- msg_delete_netconn * dmsg, ss_close_conn_fun close_conn)
-{
- NSSBR_LOGINF
- ("ref > 0 and pid array is empty, start delay closing conn]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- close_conn (dmsg, SS_DELAY_CLOSE_SEC);
-}
-
-/*****************************************************************************
-* Prototype : ss_process_delay_up
-* Description : delay is up
-* Input : spl_netconn_t *conn
-* pid_t pid
-* msg_delete_netconn *dmsg
-* ss_close_conn_fun close_conn
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-ss_process_delay_up (spl_netconn_t * conn, pid_t pid,
- msg_delete_netconn * dmsg, ss_close_conn_fun close_conn)
-{
- spl_netconn_t **conn_array = conn->recycle.group->conn_array;
- u32 conn_num = conn->recycle.group->conn_num;
- u8 notify_omc = dmsg->notify_omc;
-
- if (SS_DELAY_STARTED == conn->recycle.delay_flag)
- {
- if (ss_is_pid_array_empty (conn))
- {
- NSSBR_LOGINF
- ("delay time is up,close conn now]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- conn->recycle.delay_flag = SS_DELAY_STOPPED;
- conn->recycle.delay_msg = NULL;
- ss_close_conn_now (conn, dmsg, pid, close_conn);
- return;
- }
- else
- {
- NSSBR_LOGINF
- ("stop delay closing conn,conn still working]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- conn->recycle.delay_flag = SS_DELAY_STOPPED;
- conn->recycle.delay_msg = NULL;
- ss_free_del_conn_msg (dmsg);
- ss_notify_omc (conn_array, conn_num, notify_omc, pid);
- return;
- }
- }
- else if (SS_DELAY_AGAIN == conn->recycle.delay_flag)
- {
- if (ss_is_pid_array_empty (conn))
- {
- NSSBR_LOGINF
- ("delay time is up,but need delay again]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- conn->recycle.delay_flag = SS_DELAY_STARTED;
- ss_close_conn_delay (conn, pid, dmsg, close_conn);
- return;
- }
- else
- {
- NSSBR_LOGINF
- ("stop delay closing conn,conn still working]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- conn->recycle.delay_flag = SS_DELAY_STOPPED;
- conn->recycle.delay_msg = NULL;
- ss_free_del_conn_msg (dmsg);
- ss_notify_omc (conn_array, conn_num, notify_omc, pid);
- return;
- }
- }
- else if (SS_DELAY_STOPPING == conn->recycle.delay_flag)
- {
- NSSBR_LOGINF
- ("the conn has been closed,free conn]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- conn->recycle.delay_flag = SS_DELAY_STOPPED;
- conn->recycle.delay_msg = NULL;
- free_conn_by_spl (conn);
- ss_free_del_conn_msg (dmsg);
- ss_notify_omc (conn_array, conn_num, notify_omc, pid);
- return;
- }
- else
- {
- NSSBR_LOGERR ("this can not happen]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- }
-}
-
-/*****************************************************************************
-* Prototype : ss_recycle_conn
-* Description : recycle conn
-* Input : void *close_data
-* ss_close_conn_fun close_conn
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-ss_recycle_conn (void *close_data, ss_close_conn_fun close_conn)
-{
- msg_delete_netconn *dmsg = (msg_delete_netconn *) close_data;
- spl_netconn_t *conn = dmsg->conn;
- pid_t pid = dmsg->pid;
- u8 notify_omc = dmsg->notify_omc;
- struct spl_netconn **conn_array = conn->recycle.group->conn_array;
- u32 conn_num = conn->recycle.group->conn_num;
-
- int ret = ss_del_pid (conn, pid);
- if (0 == ret)
- {
- i32 ref = ss_dec_fork_ref (conn);
- if (0 == ref)
- {
- if (conn->recycle.delay_flag != SS_DELAY_STOPPED)
- {
- conn->recycle.delay_flag = SS_DELAY_STOPPING;
- NSSBR_LOGINF
- ("stop delay closing conn,close conn now]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- }
- else
- {
- NSSBR_LOGINF ("close conn now]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- }
-
- ss_close_conn_now (conn, dmsg, pid, close_conn);
- return 0;
- }
- else
- {
- if (ss_is_pid_array_empty (conn))
- {
- if (SS_DELAY_STOPPED == conn->recycle.delay_flag) /* only start one delay */
- {
- conn->recycle.delay_flag = SS_DELAY_STARTED;
- conn->recycle.delay_msg = close_data;
- ss_close_conn_delay (conn, pid, dmsg, close_conn);
- return 0;
- }
- else if (SS_DELAY_STARTED == conn->recycle.delay_flag)
- {
- conn->recycle.delay_flag = SS_DELAY_AGAIN;
- NSSBR_LOGINF
- ("ref > 0 and pid array is empty, delay again]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- }
- }
- }
- }
- else
- {
- if (conn->recycle.delay_msg && (conn->recycle.delay_msg == close_data)) /* only the stater can process */
- {
- ss_process_delay_up (conn, pid, dmsg, close_conn);
- return 0;
- }
- }
-
- NSSBR_LOGINF ("go to notify omc]conn=%p,pid=%d,private_data=%p", conn, pid,
- conn->private_data);
- ss_free_del_conn_msg (dmsg);
- ss_notify_omc (conn_array, conn_num, notify_omc, pid);
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_recycle_conn
-* Description : post msg to spl
-* Input : spl_netconn_t* conn
-* pid_t pid
-* u8 notify_omc
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_handle_recycle_conn (spl_netconn_t * conn, pid_t pid, u8 notify_omc)
-{
- data_com_msg *m = msg_malloc (ss_get_msg_pool (conn));
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]conn=%p,pid=%d,private_data=%p", conn,
- pid, conn->private_data);
- return -1;
- }
-
- NSSBR_LOGINF ("recycle conn]conn=%p,pid=%d,private_data=%p", conn, pid,
- conn->private_data);
-
- m->param.module_type = MSG_MODULE_SBR;
- m->param.major_type = SPL_TCPIP_NEW_MSG_API;
- m->param.minor_type = SPL_API_DO_DELCON;
- m->param.err = 0;
- m->param.op_type = MSG_ASYN_POST;
- sys_sem_init (&m->param.op_completed);
- m->param.receiver = ss_get_recv_obj (conn);
- m->param.extend_member_bit = 0;
-
- msg_delete_netconn *p = (msg_delete_netconn *) m->buffer;
- p->extend_member_bit = 0;
- p->time_started = sys_now ();
- p->shut = 0;
- p->pid = pid;
- p->conn = conn;
- p->notify_omc = notify_omc;
- p->msg_box_ref = SPL_MSG_BOX_NUM;
- p->buf = NULL;
-
- /* to ensure that the last deal with SPL_API_DO_DELCON message */
- int i;
- for (i = 0; i < SPL_MSG_BOX_NUM; ++i)
- {
- if (msg_post_with_lock_rel
- (m,
- ss_get_instance_msg_box (ss_get_bind_thread_index (conn), i)) < 0)
- {
- msg_free (m);
- NSSBR_LOGERR ("post msg failed]conn=%p,pid=%d,private_data=%p",
- conn, pid, conn->private_data);
- return -1;
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_recycle_fd_share
-* Description : recycle sbr_fd_share
-* Input : sbr_fd_share* fd_share
-* pid_t pid
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_recycle_fd_share (sbr_fd_share * fd_share, pid_t pid)
-{
- if (fd_share->common_lock.locked == pid)
- {
- common_spinlock_unlock (&fd_share->common_lock);
- }
-
- if (fd_share->recv_lock.locked == pid)
- {
- common_spinlock_unlock (&fd_share->recv_lock);
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_recycle_conn
-* Description : recycle api,called by recycle module
-* Input : u32 exit_pid
-* void *pdata
-* u16 rec_type
-* Output : None
-* Return Value : nsfw_rcc_stat
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-nsfw_rcc_stat
-sbr_recycle_conn (u32 exit_pid, void *pdata, u16 rec_type)
-{
- NSSBR_LOGINF ("start recycle]pid=%d", exit_pid);
-
- if (0 == exit_pid)
- {
- NSSBR_LOGERR ("pid is not ok]pid=%d", exit_pid);
- return NSFW_RCC_CONTINUE;
- }
-
- spl_netconn_t **conn_array = spl_get_conn_array (exit_pid);
- if (!conn_array)
- {
- NSSBR_LOGERR ("conn_array is NULL]pid=%d", exit_pid);
- return NSFW_RCC_CONTINUE;
- }
-
- u32 num = spl_get_conn_num ();
- spl_netconn_t *conn;
- sbr_fd_share *fd_share;
- u32 i;
- for (i = 0; i < num; ++i)
- {
- conn = conn_array[i];
- if (ss_is_pid_exist (conn, exit_pid))
- {
- fd_share = (sbr_fd_share *) ((char *) conn + SS_NETCONN_SIZE);
- sbr_recycle_fd_share (fd_share, exit_pid);
- sbr_handle_recycle_conn (conn, exit_pid, FALSE);
- }
- }
-
- sbr_handle_recycle_conn (conn_array[0], exit_pid, TRUE);
- return NSFW_RCC_SUSPEND;
-}
-
-REGIST_RECYCLE_OBJ_FUN (NSFW_REC_SBR_SOCKET, sbr_recycle_conn)
diff --git a/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt b/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt
deleted file mode 100644
index e7915d2..0000000
--- a/stacks/lwip_stack/lwip_src/socket/CMakeLists.txt
+++ /dev/null
@@ -1,76 +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.
-#########################################################################
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIE -pie -fPIC -m64 -mssse3 -std=gnu89")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wshadow -Wfloat-equal -Wformat=2")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium")
-
-SET(ADAPT_DIRECTORIES "${PROJECT_SOURCE_DIR}/src/adapt/")
-#SET(DMM_API "${PROJECT_SOURCE_DIR}/src/nSocket/include/")
-
-ADD_DEFINITIONS(-D_GNU_SOURCE -D_FORTIFY_SOURCE=2)
-ADD_DEFINITIONS(-DDPDK_MODULE=0)
-if(WITH_HAL_LIB)
-SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../../src/include/rtp_config.h)
-else()
- SET(PAL_H_DIRECTORIES "/usr/include/dpdk/")
- SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common/common_sys_config.h)
- INCLUDE_DIRECTORIES(
- ${PAL_H_DIRECTORIES}
- ${ADAPT_DIRECTORIES}
-# ${DMM_API}
- )
-endif()
-SET(COMPLE_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../src/include/compile_config.h)
-#SET(MGR_COM ${PROJECT_SOURCE_DIR}/src/framework/ipc/mgr_com/mgr_com.h)
-SET(MGR_COM ${CMAKE_CURRENT_LIST_DIR}/../../src/include/mgr_com.h)
-ADD_DEFINITIONS(-include ${RTP_CONFIG})
-ADD_DEFINITIONS(-include ${COMPLE_CONFIG})
-ADD_DEFINITIONS(-include ${MGR_COM})
-if(WITH_SECUREC_LIB)
-LINK_LIBRARIES(pthread rt securec)
-else()
-LINK_LIBRARIES(pthread rt)
-endif()
-LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC})
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_LIST_DIR}/../../../../thirdparty/json/json-c-0.12.1/
- ${CMAKE_CURRENT_LIST_DIR}/../../../../thirdparty/glog/glog-0.3.4/src/
- ${CMAKE_CURRENT_LIST_DIR}/../../src/include/
-# ${PROJECT_SOURCE_DIR}/src/framework/include/
-# ${PROJECT_SOURCE_DIR}/src/framework/common/include/
-# ${ADAPT_DIRECTORIES}
-# ${DMM_API}
-)
-
-FILE(GLOB COMMON ../common/*.c)
-FILE(GLOB SOCKET ./*.c)
-ADD_LIBRARY(socket STATIC ${COMMON} ${SOCKET})
-ADD_DEPENDENCIES(socket JSON GLOG DPDK)
-TARGET_INCLUDE_DIRECTORIES(
- socket
- PRIVATE
- ../common/
- ./
- ${CMAKE_CURRENT_LIST_DIR}/../../src/sbr/
- ${CMAKE_CURRENT_LIST_DIR}/../../src/include/
-# ${PROJECT_SOURCE_DIR}/src/framework/include/
-# ${PROJECT_SOURCE_DIR}/src/framework/common/include/
-# ${ADAPT_DIRECTORIES}
-# ${DMM_API}
-)
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_cfg.h b/stacks/lwip_stack/lwip_src/socket/stackx_cfg.h
deleted file mode 100644
index 4f4749d..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_cfg.h
+++ /dev/null
@@ -1,54 +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.
-*/
-
-#ifndef STACKX_CONTAINER_CFG_H
-#define STACKX_CONTAINER_CFG_H
-#include "types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define SBR_MAX_CFG_PATH_LEN 256
-#define SBR_MAX_CONTAINER_IP_NUM 1024
-#define SBR_MAX_CFG_FILE_SIZE (1 * 1024 * 1024)
-
-typedef struct
-{
- u32 ip;
- u32 mask_len;
-} sbr_container_ip;
-
-typedef struct
-{
- sbr_container_ip ip_array[SBR_MAX_CONTAINER_IP_NUM];
- u32 ip_num;
-} sbr_container_ip_group;
-
-extern sbr_container_ip_group g_container_ip_group;
-
-int sbr_init_cfg ();
-int sbr_get_src_ip (u32 dst_ip, u32 * src_ip);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
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;
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c b/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c
deleted file mode 100644
index 0223ac9..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.c
+++ /dev/null
@@ -1,150 +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_epoll_api.h"
-#include "stackx_spl_share.h"
-#include "common_pal_bitwide_adjust.h"
-#include "nstack_dmm_adpt.h"
-#include "nstack_dmm_api.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif /* _cplusplus */
-
-void
-epoll_triggle_event_from_api (sbr_socket_t * sock, int op)
-{
- struct spl_netconn *conn = sbr_get_conn (sock);
- void *epInfo = ADDR_SHTOL (conn->epInfo);
- //NSPOL_LOGDBG(SOCKETS_DEBUG, "enter]fd=%d,op=%d", sock, op);
- switch (op)
- {
- case EPOLL_API_OP_RECV:
- break;
- case EPOLL_API_OP_SEND:
- if (conn->epoll_flag && epInfo)
- {
- nstack_event_callback (epInfo, EPOLLOUT);
- }
- break;
- case EPOLL_API_OP_STACK_RECV:
- if (conn->epoll_flag && epInfo)
- {
- nstack_event_callback (epInfo, EPOLLIN);
- }
- break;
- default:
- break;
- }
- return;
-}
-
-/*
- * This function will be registed to application
- * The context will be in the application
- */
-unsigned int
-stackx_eventpoll_triggle (sbr_socket_t * sock, int triggle_ops,
- struct epoll_event *pevent, void *pdata)
-{
- struct spl_netconn *conn = sbr_get_conn (sock);
- unsigned int events = 0;
- if (!conn)
- {
- NSPOL_LOGINF (SOCKETS_DEBUG, "get socket failed]fd=%d", sock->fd);
- return -1;
- }
-
- NSPOL_LOGINF (SOCKETS_DEBUG,
- "]fd=%d,triggle_ops=%d conn=%p event:%d pdata=%p", sock->fd,
- triggle_ops, conn, pevent->events, pdata);
- /*
- * sock->epoll_flag must be set before sock->rcvevent check.
- * Consider this Scenario : 1) network stack has got one packet, but event_callback not called yet
- * 2) Do epoll ctl add, then stackx triggle will check event, it will get 0
- * 3) network stack call event_callback , it will check epoll_flag
- * So, if epoll_flag not set before sock->rcvent check, neither of network stack and stackx triggle
- * will add this event to epoll. because : for network stack, event_callback check epoll_flag fail
- * for stackx triggle, event check fail.
- */
- if (nstack_ep_triggle_add == triggle_ops)
- {
- /*log info */
- conn->epInfo = pdata;
- __sync_fetch_and_add (&conn->epoll_flag, 1);
- }
-
- if ((pevent->events & EPOLLIN)
- &&
- (!((conn->rcvevent == 0) && (sbr_get_fd_share (sock)->lastdata == 0)
- && (sbr_get_fd_share (sock)->lastoffset == 0))))
- events |= EPOLLIN;
- if ((pevent->events & EPOLLOUT) && conn->sendevent)
- events |= EPOLLOUT;
- if (conn->errevent)
- events |= pevent->events & (conn->errevent);
-
- switch (triggle_ops)
- {
- case nstack_ep_triggle_add:
- break;
- case nstack_ep_triggle_mod:
- break;
- case nstack_ep_triggle_del:
- if (conn->epoll_flag > 0)
- {
- __sync_fetch_and_sub (&conn->epoll_flag, 1);
- }
- events = 0;
- break;
- default:
- return -1;
- }
- return events;
-}
-
-/*
- * This function will be registed to application
- * The context will be in the application
- * RETURN VALUE : Event exists in current protocol
- */
-unsigned int
-stackx_eventpoll_getEvt (sbr_socket_t * sock, unsigned int events)
-{
- struct spl_netconn *conn = sbr_get_conn (sock);
- unsigned int tevent = 0;
- if ((events & EPOLLIN)
- &&
- (!((conn->rcvevent == 0) && (sbr_get_fd_share (sock)->lastdata == 0)
- && (sbr_get_fd_share (sock)->lastoffset == 0))))
- {
- tevent |= EPOLLIN;
- }
-
- if ((events & EPOLLOUT) && conn->sendevent)
- {
- tevent |= EPOLLOUT;
- }
- return tevent;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif /* _cplusplus */
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.h b/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.h
deleted file mode 100644
index 59a1d21..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_epoll_api.h
+++ /dev/null
@@ -1,48 +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.
-*/
-
-#ifndef STACKX_EPOLL_API_H
-#define STACKX_EPOLL_API_H
-#include "stackx_socket.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef enum
-{
- EPOLL_API_OP_RECV,
- EPOLL_API_OP_SEND,
- EPOLL_API_OP_STACK_RECV
-} EPOLL_TRIGGLE_EVENT_API_OPS_T;
-
-extern void epoll_triggle_event_from_api (sbr_socket_t * sock, int op);
-extern unsigned int stackx_eventpoll_getEvt (sbr_socket_t * sock,
- unsigned int events);
-extern unsigned int stackx_eventpoll_triggle (sbr_socket_t * sock,
- int triggle_ops,
- struct epoll_event *pevent,
- void *pdata);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_event.c b/stacks/lwip_stack/lwip_src/socket/stackx_event.c
deleted file mode 100644
index 1967ecc..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_event.c
+++ /dev/null
@@ -1,128 +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_spl_share.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_event.h"
-
-#define FREE_FD_SET(readfd, writefd, exceptfd) {\
-if(readfd)\
-free(readfd);\
-if(writefd)\
-free(writefd);\
-if(exceptfd)\
-free(exceptfd);\
-}
-
-int
-lwip_try_select (int fdsize, fd_set * fdread, fd_set * fdwrite,
- fd_set * fderr, struct timeval *timeout)
-{
- int i;
- int nready = 0;
- nstack_fd_set *read_out;
- nstack_fd_set *write_out;
- nstack_fd_set *err_out;
- nstack_fd_set *readfd = (nstack_fd_set *) fdread;
- nstack_fd_set *writefd = (nstack_fd_set *) fdwrite;
- nstack_fd_set *exceptfd = (nstack_fd_set *) fderr;
- sbr_socket_t *sock;
- spl_netconn_t *conn;
-
- if ((fdsize >= NSTACK_SETSIZE) || (fdsize < 0))
- {
- return 0;
- }
- read_out = malloc (sizeof (nstack_fd_set));
- write_out = malloc (sizeof (nstack_fd_set));
- err_out = malloc (sizeof (nstack_fd_set));
- if ((!read_out) || (!write_out) || (!err_out))
- {
- NSPOL_LOGERR ("malloc nstack_fd_set fail");
- FREE_FD_SET (read_out, write_out, err_out);
- return -1;
- }
- int ret = NSTACK_FD_ZERO (read_out);
- int ret1 = NSTACK_FD_ZERO (write_out);
- int ret2 = NSTACK_FD_ZERO (err_out);
-
- if ((EOK != ret) || (EOK != ret1) || (EOK != ret2))
- {
- NSPOL_LOGERR ("NSTACK_FD_ZERO fail");
- FREE_FD_SET (read_out, write_out, err_out);
- return -1;
- }
-
- for (i = 0; i < fdsize; i++)
- {
- if (!((readfd && NSTACK_FD_ISSET (i, readfd))
- || (writefd && NSTACK_FD_ISSET (i, writefd))
- || (exceptfd && NSTACK_FD_ISSET (i, exceptfd))))
- {
- continue;
- }
- sock = sbr_lookup_sk (i);
- if (sock == NULL)
- {
- errno = EBADF;
- FREE_FD_SET (read_out, write_out, err_out);
- return -1;
- }
- conn = sbr_get_conn (sock);
- if (!conn)
- {
- errno = EBADF;
- FREE_FD_SET (read_out, write_out, err_out);
- return -1;
- }
- if (readfd && NSTACK_FD_ISSET (i, readfd) &&
- ((sbr_get_fd_share (sock)->lastdata != NULL)
- || (conn->rcvevent > 0)))
- {
- NSTACK_FD_SET (i, read_out);
- nready++;
- }
- if (writefd && NSTACK_FD_ISSET (i, writefd) && (conn->sendevent != 0))
- {
- NSTACK_FD_SET (i, write_out);
- nready++;
- }
- if (exceptfd && NSTACK_FD_ISSET (i, exceptfd) && (conn->errevent != 0))
- {
- NSTACK_FD_SET (i, write_out);
- nready++;
- }
- }
-
- //TODO: need to handle fd_set and nstack_fd_set memory issue
- if (readfd)
- {
- *readfd = *read_out;
- }
-
- if (writefd)
- {
- *writefd = *write_out;
- }
-
- if (exceptfd)
- {
- *exceptfd = *err_out;
- }
-
- FREE_FD_SET (read_out, write_out, err_out);
- return nready;
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_event.h b/stacks/lwip_stack/lwip_src/socket/stackx_event.h
deleted file mode 100644
index f95b370..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_event.h
+++ /dev/null
@@ -1,46 +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.
-*/
-
-#ifndef __STACKX_EVENT_H__
-#define __STACKX_EVENT_H__
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <stdio.h>
-#include <unistd.h>
-#include "stackx_socket.h"
-#include "nstack_securec.h"
-#include "sbr_res_mgr.h"
-#include "sbr_index_ring.h"
-#define NSTACK_SETSIZE SBR_MAX_FD_NUM
-
-typedef struct
-{
- unsigned char fds_bits[(NSTACK_SETSIZE + 7) / 8];
-} __attribute__ ((packed)) nstack_fd_set;
-
-#define NSTACK_FD_SET(n, p) ((p)->fds_bits[(n)/8]|=1U<<((n)&0x07))
-#define NSTACK_FD_ISSET(n,p) (((p)->fds_bits[(n)/8]&(1U<<((n)&0x07)))?1:0)
-#define NSTACK_FD_CLR(n,p) ((p)->fds_bits[(n)/8]&=~(1U<<((n)&0x07)))
-#define NSTACK_FD_ZERO(p) (MEMSET_S((void *)(p), sizeof(*(p)),0,sizeof(*(p))))
-#define NSTACK_FD_OR(p1 ,p2) {\
- int i;\
- for(i = 0; i < (NSTACK_SETSIZE+7)/8; i++){\
- (p1)->fds_bits[i] |= (p2)->fds_bits[i];\
- }\
-}
-
-#endif /* __STACKX_EVENT_H__ */
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_macro.h b/stacks/lwip_stack/lwip_src/socket/stackx_macro.h
deleted file mode 100644
index 96a0b91..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_macro.h
+++ /dev/null
@@ -1,24 +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.
-*/
-
-#ifndef STACKX_MACRO_H
-#define STACKX_MACRO_H
-
-#ifndef SBR_USE_LOCK
-#define SBR_USE_LOCK
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.c b/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.c
deleted file mode 100644
index 6fcde44..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.c
+++ /dev/null
@@ -1,775 +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_msg_handler.h"
-#include "stackx_spl_share.h"
-#include "stackx_spl_msg.h"
-#include "nsfw_msg_api.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_res_mgr.h"
-#include "stackx_prot_com.h"
-#include "nstack_securec.h"
-//#include "stackx_dfx_api.h"
-
-#define SBR_MSG_MALLOC(sk) msg_malloc(ss_get_msg_pool(sbr_get_conn(sk)))
-#define SBR_MSG_FREE(msg) msg_free(msg)
-
-#define SBR_MSG_POST(msg, ring) \
- do { \
- if (MSG_ASYN_POST == msg->param.op_type)\
- {\
- if (msg_post(msg, ring) < 0)\
- {\
- SBR_MSG_FREE(msg); \
- NSSBR_LOGERR("msg_post failed]major=%u,minor=%u,type=%u", \
- msg->param.major_type, msg->param.minor_type, msg->param.op_type); \
- }\
- } \
- else \
- {\
- if (msg_post(msg, ring) < 0)\
- {\
- msg->param.err = ECONNABORTED; \
- NSSBR_LOGERR("msg_post_with_ref failed]major=%u,minor=%u,type=%u", \
- msg->param.major_type, msg->param.minor_type, msg->param.op_type); \
- }\
- } \
- } while (0)
-
-#define SBR_MSG_POST_RET(msg, ring, ret) \
- do { \
- if (MSG_ASYN_POST == msg->param.op_type)\
- {\
- if ((ret = msg_post(msg, ring)) < 0)\
- {\
- SBR_MSG_FREE(msg); \
- NSSBR_LOGERR("msg_post failed]major=%u,minor=%u,type=%u", \
- msg->param.major_type, msg->param.minor_type, msg->param.op_type); \
- }\
- } \
- else \
- {\
- if ((ret = msg_post(msg, ring)) < 0)\
- {\
- msg->param.err = ECONNABORTED; \
- NSSBR_LOGERR("msg_post_with_ref failed]major=%u,minor=%u,type=%u", \
- msg->param.major_type, msg->param.minor_type, msg->param.op_type); \
- }\
- } \
- } while (0)
-
-NSTACK_STATIC inline void
-_sbr_construct_msg (data_com_msg * m, u16 major_type, u16 minor_type,
- u16 type, sbr_socket_t * sk)
-{
- m->param.module_type = MSG_MODULE_SBR;
- m->param.major_type = major_type;
- m->param.minor_type = minor_type;
- m->param.err = 0;
- m->param.op_type = type;
- sys_sem_init (&m->param.op_completed);
- m->param.receiver = ss_get_recv_obj (sbr_get_conn (sk));
- m->param.comm_receiver = ss_get_comm_private_data (sbr_get_conn (sk));
- m->param.extend_member_bit = 0;
-}
-
-#define sbr_construct_msg(m, major_type, minor_type, type, sk) { \
- _sbr_construct_msg(m, major_type, minor_type, type, sk); \
- NSSBR_LOGINF("fd=%d,conn=%p,private_data=%p", sk->fd, sbr_get_conn(sk), ss_get_private_data(sbr_get_conn(sk))); \
- }
-
-#define sbr_construct_msg_dbg(m, major_type, minor_type, type, sk) { \
- _sbr_construct_msg(m, major_type, minor_type, type, sk); \
- NSSBR_LOGDBG("fd=%d,conn=%p,private_data=%p", sk->fd, sbr_get_conn(sk), ss_get_private_data(sbr_get_conn(sk))); \
- }
-
-/*****************************************************************************
-* Prototype : sbr_attach_msg
-* Description : use buf's msg first
-* Input : sbr_socket_t * sk
-* struct pbuf* buf
-* Output : None
-* Return Value : static inline data_com_msg*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline data_com_msg *
-sbr_attach_msg (sbr_socket_t * sk, struct spl_pbuf *buf)
-{
- data_com_msg *m = NULL;
- if (!sk)
- {
- return m;
- }
-
- if (buf && buf->msg)
- {
- m = (data_com_msg *) ADDR_SHTOL (buf->msg);
- }
- else
- {
- m = SBR_MSG_MALLOC (sk);
- }
-
- return m;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_socket
-* Description : create socket
-* Input : sbr_socket_t * sk
-* netconn_type_t type
-* u8 proto
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_socket (sbr_socket_t * sk, spl_netconn_type_t type, u8 proto)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_NEWCONN,
- MSG_SYN_POST, sk);
- msg_new_netconn *p = (msg_new_netconn *) m->buffer;
- p->conn = (spl_netconn_t *) ADDR_LTOSH (sbr_get_conn (sk));
- p->type = type;
- p->proto = proto;
- p->socket = sk->fd;
- p->extend_member_bit = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- int err = sbr_spl_err_to_errno (m->param.err);
- SBR_MSG_FREE (m);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle socket failed]fd=%d,type=%d,proto=%u,err=%d",
- sk->fd, type, proto, err);
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_bind
-* Description : bind
-* Input : sbr_socket_t * sk
-* spl_ip_addr_t * addr
-* u16 port
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_bind (sbr_socket_t * sk, spl_ip_addr_t * addr, u16 port)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_BIND, MSG_SYN_POST,
- sk);
- msg_bind *p = (msg_bind *) m->buffer;
- p->ipaddr = *addr;
- p->port = port;
- p->extend_member_bit = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- int err = sbr_spl_err_to_errno (m->param.err);
- SBR_MSG_FREE (m);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle bind failed]fd=%d,err=%d", sk->fd, err);
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return 0;
-}
-
-int
-sbr_handle_listen (sbr_socket_t * sk, int backlog)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_LISTEN,
- MSG_SYN_POST, sk);
- msg_listen *p = (msg_listen *) m->buffer;
- p->conn_pool = sbr_get_conn_pool ();
- p->backlog = backlog;
- p->extend_member_bit = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- int err = sbr_spl_err_to_errno (m->param.err);
- SBR_MSG_FREE (m);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle listen failed]fd=%d,err=%d", sk->fd, err);
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_connect
-* Description : connect
-* Input : sbr_socket_t * sk
-* spl_ip_addr_t * addr
-* u16 port
-* spl_ip_addr_t* local_ip
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_connect (sbr_socket_t * sk, spl_ip_addr_t * addr, u16 port,
- spl_ip_addr_t * local_ip)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_CONNECT,
- MSG_SYN_POST, sk);
- msg_connect *p = (msg_connect *) m->buffer;
- p->local_ip = *local_ip;
- p->ipaddr = *addr;
- p->port = port;
- p->extend_member_bit = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- int err = sbr_spl_err_to_errno (m->param.err);
- SBR_MSG_FREE (m);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle connect failed]fd=%d,err=%d", sk->fd, err);
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_get_name
-* Description : get name
-* Input : sbr_socket_t * sk
-* struct sockaddr * name
-* socklen_t * namelen
-* u8 cmd
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_get_name (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen, u8 cmd)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_GETSOCK_NAME,
- MSG_SYN_POST, sk);
- msg_getaddrname *p = (msg_getaddrname *) m->buffer;
- p->cmd = cmd;
- p->extend_member_bit = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- int err = sbr_spl_err_to_errno (m->param.err);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle get name failed]fd=%d,err=%d", sk->fd, err);
- goto error;
- }
- else
- {
- if (*namelen > sizeof (p->sock_addr))
- {
- *namelen = sizeof (p->sock_addr);
- }
-
- int ret = MEMCPY_S (name, *namelen, &p->sock_addr, *namelen);
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]fd=%d,ret=%d", sk->fd, ret);
- err = EINVAL;
- goto error;
- }
-
- *namelen = sizeof (p->sock_addr);
- }
-
- SBR_MSG_FREE (m);
- return 0;
-
-error:
- sbr_set_sk_errno (sk, err);
- SBR_MSG_FREE (m);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_setsockopt
-* Description : msg box will changed in IP_TOS
-* Input : sbr_socket_t * sk
-* int level
-* int optname
-* const void *optval
-* socklen_t optlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_setsockopt (sbr_socket_t * sk, int level, int optname,
- const void *optval, socklen_t optlen)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_SET_SOCK_OPT,
- MSG_SYN_POST, sk);
- msg_setgetsockopt *p = (msg_setgetsockopt *) m->buffer;
- p->extend_member_bit = 0;
- p->level = level;
- p->optname = optname;
- p->msg_box = NULL; /* init the value to avoid unexpected consequences */
-
- if (optlen > sizeof (p->optval))
- {
- optlen = sizeof (p->optval);
- }
-
- p->optlen = optlen;
- int err;
- int ret = MEMCPY_S (&p->optval, sizeof (p->optval), optval, optlen);
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]fd=%d,ret=%d", sk->fd, ret);
- err = EINVAL;
- goto error;
- }
-
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- err = sbr_spl_err_to_errno (m->param.err);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle setsockopt failed]fd=%d,err=%d", sk->fd, err);
- goto error;
- }
-
- if (IPPROTO_IP == level && IP_TOS == optname && p->msg_box)
- {
- ss_set_msg_box (sbr_get_conn (sk),
- (mring_handle) ADDR_SHTOL (p->msg_box));
- }
-
- SBR_MSG_FREE (m);
- return 0;
-
-error:
- sbr_set_sk_errno (sk, err);
- SBR_MSG_FREE (m);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_getsockopt
-* Description : get sockopt
-* Input : sbr_socket_t * sk
-* int level
-* int optname
-* void *optval
-* socklen_t* optlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_getsockopt (sbr_socket_t * sk, int level, int optname,
- void *optval, socklen_t * optlen)
-{
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_GET_SOCK_OPT,
- MSG_SYN_POST, sk);
- msg_setgetsockopt *p = (msg_setgetsockopt *) m->buffer;
- p->extend_member_bit = 0;
- p->level = level;
- p->optname = optname;
-
- if (*optlen > sizeof (p->optval))
- {
- *optlen = sizeof (p->optval);
- }
-
- p->optlen = *optlen;
- int err;
- int ret = MEMCPY_S (&p->optval, sizeof (p->optval), optval, *optlen);
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]fd=%d,ret=%d", sk->fd, ret);
- err = EINVAL;
- goto error;
- }
-
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
-
- err = sbr_spl_err_to_errno (m->param.err);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle getsockopt failed]fd=%d,err=%d", sk->fd, err);
- goto error;
- }
-
- ret = MEMCPY_S (optval, *optlen, &p->optval.int_optval, *optlen);
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]fd=%d,ret=%d", sk->fd, ret);
- err = EINVAL;
- goto error;
- }
-
- SBR_MSG_FREE (m);
- return 0;
-
-error:
- sbr_set_sk_errno (sk, err);
- SBR_MSG_FREE (m);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_close
-* Description : need care msg_box_ref,make sure to finalize this message
-* Input : sbr_socket_t * sk
-* u8 how
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_close (sbr_socket_t * sk, u8 how)
-{
- data_com_msg *m = sbr_attach_msg (sk,
- (struct spl_pbuf *)
- ADDR_SHTOL (sbr_get_fd_share
- (sk)->recoder.head));
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_DELCON,
- MSG_ASYN_POST, sk);
- msg_delete_netconn *p = (msg_delete_netconn *) m->buffer;
- p->extend_member_bit = 0;
- p->buf = NULL;
- p->time_started = sys_now ();
- p->shut = how;
- p->pid = get_sys_pid ();
- p->conn = (spl_netconn_t *) ADDR_LTOSH (sbr_get_conn (sk));
- p->notify_omc = FALSE;
- p->msg_box_ref = SPL_MSG_BOX_NUM;
-
- /* to ensure that the last deal with SPL_API_DO_DELCON message */
- int i;
- for (i = 0; i < SPL_MSG_BOX_NUM; ++i)
- {
- SBR_MSG_POST (m,
- ss_get_instance_msg_box (ss_get_bind_thread_index
- (sbr_get_conn (sk)), i));
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_udp_send
-* Description : udp send
-* Input : sbr_socket_t * sk
-* struct netbuf *buf
-* spl_ip_addr_t* local_ip
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_udp_send (sbr_socket_t * sk, struct spl_netbuf *buf,
- spl_ip_addr_t * local_ip)
-{
- data_com_msg *m =
- sbr_attach_msg (sk, (struct spl_pbuf *) ADDR_SHTOL (buf->p));
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg_dbg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_SEND,
- MSG_ASYN_POST, sk);
- msg_send_buf *p = (msg_send_buf *) m->buffer;
- p->local_ip.addr = local_ip->addr;
- int ret = MEMCPY_S (&p->addr, sizeof (spl_ip_addr_t), &buf->addr,
- sizeof (spl_ip_addr_t));
- if (ret != 0)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]fd=%d,ret=%d", sk->fd, ret);
- sbr_set_sk_io_errno (sk, EINVAL);
- SBR_MSG_FREE (m);
- return -1;
- }
-
- p->p = buf->p;
- p->port = buf->port;
- p->extend_member_bit = 0;
- SBR_MSG_POST_RET (m, sbr_get_msg_box (sk), ret);
-
- if (0 == ret)
- {
- return 0;
- }
- else
- {
- NSSBR_LOGERR ("post msg failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EAGAIN);
- return -1;
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_free_recv_buf
-* Description : free recv buf,can't free buf in app
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-sbr_handle_free_recv_buf (sbr_socket_t * sk)
-{
- data_com_msg *m = sbr_attach_msg (sk,
- (struct spl_pbuf *)
- ADDR_SHTOL (sbr_get_fd_share
- (sk)->recoder.head));
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- return;
- }
-
- sbr_construct_msg_dbg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_PBUF_FREE,
- MSG_ASYN_POST, sk);
- msg_free_buf *p = (msg_free_buf *) m->buffer;
- p->extend_member_bit = 0;
- p->buf = sbr_get_fd_share (sk)->recoder.head;
- sbr_get_fd_share (sk)->recoder.head = NULL;
- sbr_get_fd_share (sk)->recoder.tail = NULL;
- sbr_get_fd_share (sk)->recoder.totalLen = 0;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
-}
-
-void
-sbr_handle_free_send_buf (sbr_socket_t * sk, struct spl_pbuf *buf)
-{
- if (buf != NULL)
- {
- data_com_msg *m = sbr_attach_msg (sk, buf);
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- return;
- }
-
- sbr_construct_msg_dbg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_PBUF_FREE,
- MSG_ASYN_POST, sk);
- msg_free_buf *p = (msg_free_buf *) m->buffer;
- p->extend_member_bit = 0;
- p->buf = (struct spl_pbuf *) ADDR_LTOSH (buf);
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_handle_shutdown
-* Description : shut down
-* Input : sbr_socket_t * sk
-* u8 how
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_handle_shutdown (sbr_socket_t * sk, u8 how)
-{
- int err;
- data_com_msg *m = SBR_MSG_MALLOC (sk);
-
- if (!m)
- {
- NSSBR_LOGERR ("malloc msg failed]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_CLOSE, MSG_SYN_POST,
- sk);
- msg_close *p = (msg_close *) m->buffer;
- p->extend_member_bit = 0;
- p->time_started = sys_now ();
- p->shut = how;
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
- err = sbr_spl_err_to_errno (m->param.err);
- SBR_MSG_FREE (m);
- if (err != 0)
- {
- NSSBR_LOGERR ("handle getsockopt failed]fd=%d,err=%d", sk->fd, err);
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return 0;
-}
-
-void
-sbr_handle_tcp_recv (sbr_socket_t * sk, u32 len, struct spl_pbuf *buf)
-{
- data_com_msg *m = sbr_attach_msg (sk, buf);
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- return;
- }
-
- sbr_construct_msg_dbg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_RECV,
- MSG_ASYN_POST, sk);
- msg_recv_buf *p = (msg_recv_buf *) m->buffer;
- p->extend_member_bit = 0;
- p->len = len;
- p->p = (struct spl_pbuf *) ADDR_LTOSH (buf);
- SBR_MSG_POST (m, sbr_get_msg_box (sk));
-}
-
-int
-sbr_handle_tcp_send (sbr_socket_t * sk, size_t size, struct spl_pbuf *buf,
- u8 api_flag)
-{
- int ret;
- data_com_msg *m = sbr_attach_msg (sk, buf);
-
- if (!m)
- {
- NSSBR_LOGERR ("attach msg failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, ENOMEM);
- return -1;
- }
-
- sbr_construct_msg_dbg (m, SPL_TCPIP_NEW_MSG_API, SPL_API_DO_WRITE,
- MSG_ASYN_POST, sk);
- msg_write_buf *p = (msg_write_buf *) m->buffer;
- p->extend_member_bit = 0;
- p->len = size;
- p->p = (struct spl_pbuf *) ADDR_LTOSH (buf);
- p->apiflags = api_flag;
- SBR_MSG_POST_RET (m, sbr_get_msg_box (sk), ret);
-
- if (0 == ret)
- {
- return 0;
- }
- else
- {
- NSSBR_LOGERR ("post msg failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EAGAIN);
- return -1;
- }
-}
-
-/* need delete sbr_handle_app_touch */
-void
-sbr_handle_app_touch (void)
-{
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.h b/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.h
deleted file mode 100644
index a52d026..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_msg_handler.h
+++ /dev/null
@@ -1,78 +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.
-*/
-
-#ifndef STACKX_MSG_HANDLER_H
-#define STACKX_MSG_HANDLER_H
-#include "stackx_socket.h"
-#include "stackx_ip_addr.h"
-#include "stackx_netbuf.h"
-#include "stackx_spl_share.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define SBR_GET_SOCK_NAME 1
-#define SBR_GET_PEER_NAME 0
-
-int sbr_handle_socket (sbr_socket_t * sk, spl_netconn_type_t type, u8 proto);
-
-int sbr_handle_bind (sbr_socket_t * sk, spl_ip_addr_t * addr, u16 port);
-
-int sbr_handle_listen (sbr_socket_t * sk, int backlog);
-
-int sbr_handle_connect (sbr_socket_t * sk, spl_ip_addr_t * addr, u16 port,
- spl_ip_addr_t * local_ip);
-
-int sbr_handle_get_name (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen, u8 cmd);
-
-int sbr_handle_setsockopt (sbr_socket_t * sk, int level, int optname,
- const void *optval, socklen_t optlen);
-
-int sbr_handle_getsockopt (sbr_socket_t * sk, int level, int optname,
- void *optval, socklen_t * optlen);
-
-int sbr_handle_close (sbr_socket_t * sk, u8 how);
-
-int sbr_handle_udp_send (sbr_socket_t * sk, struct spl_netbuf *buf,
- spl_ip_addr_t * local_ip);
-
-void sbr_handle_free_recv_buf (sbr_socket_t * sk);
-
-void sbr_handle_free_send_buf (sbr_socket_t * sk, struct spl_pbuf *buf);
-
-int sbr_handle_shutdown (sbr_socket_t * sk, u8 how);
-
-void sbr_handle_tcp_recv (sbr_socket_t * sk, u32 len, struct spl_pbuf *buf);
-
-int sbr_handle_tcp_send (sbr_socket_t * sk, size_t size, struct spl_pbuf *buf,
- u8 api_flag);
-
-int sbr_handle_custom_send (sbr_socket_t * sk, struct spl_pbuf *buf,
- spl_ip_addr_t * src, spl_ip_addr_t * dst, u8 tos);
-
-int sbr_handle_custom_close (sbr_socket_t * sk, spl_ip_addr_t * addr);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.c b/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.c
deleted file mode 100644
index 292c17a..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.c
+++ /dev/null
@@ -1,679 +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 <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "stackx_msg_handler.h"
-#include "stackx_prot_com.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_err.h"
-#include "nstack_securec.h"
-#include "nsfw_rti.h"
-//#include "stackx_custom.h"
-
-#define FAST_SLEEP_TIME 10000
-#define FAST_RETRY_COUNT 100
-#define MAX_WAIT_TIMEOUT 0x7FFFFFFF
-
-/*****************************************************************************
-* Prototype : sbr_getsockopt_sol_socket
-* Description : get sol socket
-* Input : sbr_socket_t * sk
-* int optname
-* void * optval
-* socklen_t optlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_getsockopt_sol_socket (sbr_socket_t * sk, int optname, void *optval,
- socklen_t optlen)
-{
- int err = 0;
-
- switch (optname)
- {
- case SO_ERROR:
- {
- if (optlen < sizeof (int))
- {
- return EINVAL;
- }
-
- /* only overwrite ERR_OK or tempoary errors */
- err = sbr_get_sk_errno (sk);
-
- if ((0 == err) || (EINPROGRESS == err))
- {
- err =
- sbr_spl_err_to_errno (ss_get_last_errno (sbr_get_conn (sk)));
- sbr_set_sk_errno (sk, err);
- }
- else
- {
- sbr_set_sk_errno (sk, 0);
- }
-
- *(int *) optval = sbr_get_sk_errno (sk);
-
- return 0;
- }
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_RCVBUF:
- case SO_SNDBUF:
- case SO_REUSEADDR:
- if (optlen < sizeof (int))
- {
- err = EINVAL;
- }
-
- break;
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
- if (optlen < sizeof (struct timeval))
- {
- err = EINVAL;
- }
-
- break;
- case SO_LINGER:
- if (optlen < sizeof (struct linger))
- {
- err = EINVAL;
- }
-
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-/*****************************************************************************
-* Prototype : sbr_getsockopt_ipproto_ip
-* Description : get ipproto ip
-* Input : int optname
-* void * optval
-* socklen_t optlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_getsockopt_ipproto_ip (int optname, void *optval, socklen_t optlen)
-{
- int err = 0;
-
- switch (optname)
- {
- case IP_TOS:
- if (optlen < sizeof (u8))
- {
- err = EINVAL;
- }
-
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-/*****************************************************************************
-* Prototype : sbr_pick_timeout
-* Description : pick time
-* Input : const void * optval
-* socklen_t optlen
-* i32* timeout
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_pick_timeout (const void *optval, socklen_t optlen, i32 * timeout)
-{
- if (optlen < sizeof (struct timeval))
- {
- return EINVAL;
- }
-
- struct timeval *time_val = (struct timeval *) optval;
- if ((time_val->tv_usec < 0) || (time_val->tv_usec > USEC_TO_SEC))
- {
- return EDOM;
- }
- else
- {
- if (time_val->tv_sec < 0)
- {
- *timeout = 0;
- }
- else
- {
- *timeout = MAX_WAIT_TIMEOUT;
- if ((time_val->tv_sec != 0) || (time_val->tv_usec != 0))
- {
- if (time_val->tv_sec < ((MAX_WAIT_TIMEOUT / 1000) - 1))
- {
- *timeout =
- time_val->tv_sec * 1000 + time_val->tv_usec / 1000;
- }
- }
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_setsockopt_sol_socket
-* Description : set sol socket
-* Input : sbr_socket_t * sk
-* int optname
-* const void * optval
-* socklen_t optlen
-* netconn_type_t type
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_setsockopt_sol_socket (sbr_socket_t * sk, int optname, const void *optval,
- socklen_t optlen, spl_netconn_type_t type)
-{
- int err = 0;
-
- switch (optname)
- {
- case SO_REUSEADDR:
- case SO_BROADCAST:
- case SO_KEEPALIVE:
- case SO_RCVBUF:
- case SO_SNDBUF:
- if (optlen < sizeof (int))
- {
- err = EINVAL;
- }
-
- break;
- case SO_RCVTIMEO:
- err =
- sbr_pick_timeout (optval, optlen,
- &sbr_get_fd_share (sk)->recv_timeout);
- break;
- case SO_SNDTIMEO:
- err =
- sbr_pick_timeout (optval, optlen,
- &sbr_get_fd_share (sk)->send_timeout);
- break;
- case SO_LINGER:
- if (optlen < sizeof (struct linger))
- {
- err = EINVAL;
- }
-
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-/*****************************************************************************
-* Prototype : sbr_setsockopt_ipproto_ip
-* Description : set ipproto ip
-* Input : int optname
-* const void * optval
-* socklen_t optlen
-* netconn_type_t type
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_setsockopt_ipproto_ip (int optname, const void *optval, socklen_t optlen,
- spl_netconn_type_t type)
-{
- int err = 0;
-
- switch (optname)
- {
- case IP_TOS:
- if (optlen < sizeof (u8))
- {
- err = EINVAL;
- }
-
- break;
- case IP_MULTICAST_TTL:
- if (optlen < sizeof (u8))
- {
- err = EINVAL;
- break;
- }
-
- if (type != SPL_NETCONN_UDP)
- {
- err = EAFNOSUPPORT;
- break;
- }
-
- break;
- case IP_MULTICAST_IF:
- if (optlen < sizeof (struct in_addr))
- {
- err = EINVAL;
- break;
- }
-
- if (type != SPL_NETCONN_UDP)
- {
- err = EAFNOSUPPORT;
- break;
- }
-
- break;
- case IP_MULTICAST_LOOP:
- if (optlen < sizeof (u8))
- {
- err = EINVAL;
- break;
- }
-
- if (type != SPL_NETCONN_UDP)
- {
- err = EAFNOSUPPORT;
- break;
- }
-
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-/*****************************************************************************
-* Prototype : sbr_dequeue_buf
-* Description : dequeue buf
-* Input : sbr_socket_t * sk
-* void **buf
-* i32 timeout
-* u8 use_l4_ring
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_dequeue_buf (sbr_socket_t * sk, void **buf, i32 timeout)
-{
- mring_handle ring = ss_get_recv_ring (sbr_get_conn (sk));
-
- struct timespec start, end;
- long timediff;
- long timediff_sec;
- long timeout_sec = (long) (timeout / 1000);
- unsigned int retry_count = 0;
-
- if (timeout > 0)
- {
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &start)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
- }
-
- if (!ss_recv_ring_valid (sbr_get_conn (sk)))
- {
- NSSBR_LOGDBG ("ring is invalid]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, ENOTCONN);
- return -1;
- }
-
- int dequeue_ret = 0;
- pid_t pid = get_sys_pid ();
-
- while (1)
- {
- if (ss_is_shut_rd (sbr_get_conn (sk)))
- {
- NSSBR_LOGDBG ("is shut rd]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
-
- dequeue_ret = nsfw_mem_ring_dequeue (ring, buf);
- if (1 == dequeue_ret)
- {
- pbuf_set_recycle_flg ((struct spl_pbuf *) *buf, pid); /*release buf hold by app on abnormal exit */
- return 0;
- }
- else if (0 == dequeue_ret)
- {
- /*If the peer reset connect, try to receive data only once */
- if (ss_can_not_recv (sbr_get_conn (sk)))
- {
- NS_LOG_CTRL (LOG_CTRL_RECV_QUEUE_FULL, LOGSBR, "NSSBR",
- NSLOG_WAR, "try to fetch one more time]fd=%d",
- sk->fd);
- /**
- * l4_ring will not be processed here as can_not_recv flag is
- * set by TCP only.
- */
- if (1 == nsfw_mem_ring_dequeue (ring, buf))
- {
- pbuf_set_recycle_flg ((struct spl_pbuf *) *buf, pid);
- return 0;
- }
-
- sbr_set_sk_io_errno (sk, ENOTCONN);
- return -1;
- }
-
- int err = ss_get_last_errno (sbr_get_conn (sk));
- if (SPL_ERR_IS_FATAL (err) || err == ERR_TIMEOUT) /* have to handle ERR_TIMEOUT here, when TCP keepalive timeout. */
- {
- NS_LOG_CTRL (LOG_CTRL_RECV_QUEUE_FULL, LOGSBR, "NSSBR",
- NSLOG_ERR, "connection fatal error!err=%d", err);
-
- /* l4_ring need to be handled in the future */
- if (1 == nsfw_mem_ring_dequeue (ring, buf))
- {
- pbuf_set_recycle_flg ((struct spl_pbuf *) *buf, pid);
- return 0;
- }
-
- sbr_set_sk_io_errno (sk, sbr_spl_err_to_errno (err));
- return -1;
- }
-
- if (0 > timeout)
- {
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- return -1;
- }
-
- if (retry_count < FAST_RETRY_COUNT)
- {
- sys_sleep_ns (0, FAST_SLEEP_TIME);
- retry_count++;
- }
- else
- {
- sys_sleep_ns (0, sbr_get_fd_share (sk)->block_polling_time);
- }
-
- if (timeout > 0)
- {
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &end)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
- timediff_sec = end.tv_sec - start.tv_sec;
- if (timediff_sec >= timeout_sec)
- {
- timediff = end.tv_nsec > start.tv_nsec ?
- (timediff_sec * 1000) + (end.tv_nsec -
- start.tv_nsec) /
- USEC_TO_SEC : (timediff_sec * 1000) -
- ((start.tv_nsec - end.tv_nsec) / USEC_TO_SEC);
- if (timediff > timeout)
- {
- NSSBR_LOGDBG ("recv timeout]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- return -1;
- }
- }
- }
- }
- else
- {
- NSSBR_LOGERR ("dequeue failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
- }
-}
-
-int
-sbr_com_peak (sbr_socket_t * sk)
-{
- NSSBR_LOGERR ("not implement]fd=%d", sk->fd);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_try_lock_recv
-* Description : try lock recv
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_com_try_lock_recv (sbr_socket_t * sk)
-{
-#ifdef SBR_USE_LOCK
- return common_spinlock_try_lock_with_pid (&sbr_get_fd_share (sk)->recv_lock,
- get_sys_pid ());
-#else
- return 1;
-#endif
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_lock_common
-* Description : lock common
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-sbr_com_lock_common (sbr_socket_t * sk)
-{
-#ifdef SBR_USE_LOCK
- while (!common_spinlock_try_lock_with_pid
- (&sbr_get_fd_share (sk)->common_lock, get_sys_pid ()))
- {
- sys_sleep_ns (0, 0);
- }
-#endif
-
-}
-
-void
-sbr_com_fork_parent (sbr_socket_t * sk, pid_t p)
-{
- i32 ref = ss_inc_fork_ref (sbr_get_conn (sk));
- NSSBR_LOGINF ("inc fork ref] fd=%d, p=%d, ref=%d, conn=%p, private_data=%p",
- sk->fd, p, ref, sbr_get_conn (sk),
- sbr_get_conn (sk)->private_data);
-}
-
-void
-sbr_com_fork_child (sbr_socket_t * sk, pid_t p, pid_t c)
-{
- if (ss_add_pid (sbr_get_conn (sk), c) != 0)
- {
- NSSBR_LOGERR
- ("add pid failed] fd=%d, p=%d, c=%d, ref=%d, conn=%p, private_data=%p",
- sk->fd, p, c, ss_get_fork_ref (sbr_get_conn (sk)), sbr_get_conn (sk),
- sbr_get_conn (sk)->private_data);
- }
- else
- {
- NSSBR_LOGINF
- ("add pid ok] fd=%d, p=%d, c=%d, ref=%d, conn=%p, private_data=%p",
- sk->fd, p, c, ss_get_fork_ref (sbr_get_conn (sk)), sbr_get_conn (sk),
- sbr_get_conn (sk)->private_data);
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_unlock_common
-* Description : unlock common
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-sbr_com_unlock_common (sbr_socket_t * sk)
-{
-#ifdef SBR_USE_LOCK
- common_spinlock_unlock (&sbr_get_fd_share (sk)->common_lock);
-#endif
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_free_recv_buf
-* Description : free recv buf,can't free buf in app
-* Input : sbr_socket_t * sk
-* struct spl_pbuf *p
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-sbr_com_free_recv_buf (sbr_socket_t * sk, struct spl_pbuf *p)
-{
- struct spl_pbuf *p_orig = p;
- if (p)
- {
- p->freeNext = NULL;
- p = (struct spl_pbuf *) ADDR_LTOSH (p);
-
- if (sbr_get_fd_share (sk)->recoder.totalLen > 0)
- {
- ((struct spl_pbuf *)
- ADDR_SHTOL (sbr_get_fd_share (sk)->recoder.tail))->freeNext = p;
- sbr_get_fd_share (sk)->recoder.tail = p;
- }
- else
- {
- sbr_get_fd_share (sk)->recoder.head = p;
- sbr_get_fd_share (sk)->recoder.tail = p;
- }
-
- sbr_get_fd_share (sk)->recoder.totalLen++;
- }
-
- /* send MSG only if it's a big packet or number of packets larger than 32 */
- if ((p_orig && p_orig->tot_len > MAX_RECV_FREE_LEN) ||
- (sbr_get_fd_share (sk)->recoder.totalLen >= MAX_RECV_FREE_BUF))
- {
- sbr_handle_free_recv_buf (sk);
- }
-
-}
-
-/*****************************************************************************
-* Prototype : sbr_get_sockaddr_and_len
-* Description : get addr and len
-* Input : u16 port
-* spl_ip_addr_t * ipaddr
-* struct sockaddr * addr
-* socklen_t * addrlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_get_sockaddr_and_len (u16 port, spl_ip_addr_t * ipaddr,
- struct sockaddr *addr, socklen_t * addrlen)
-{
- int ret;
- struct sockaddr_in sin;
-
- ret = MEMSET_S (&sin, sizeof (sin), 0, sizeof (sin));
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMSET_S failed]ret=%d.", ret);
- return -1;
- }
-
- sin.sin_family = AF_INET;
- sin.sin_port = htons (port);
- inet_addr_from_ipaddr (&sin.sin_addr, ipaddr);
- if (*addrlen > sizeof (struct sockaddr))
- {
- *addrlen = sizeof (struct sockaddr);
- }
-
- if (*addrlen > 0)
- {
- ret = MEMCPY_S (addr, sizeof (struct sockaddr), &sin, *addrlen);
- if (0 != ret)
- {
- NSSBR_LOGERR ("MEMCPY_S failed]ret=%d", ret);
-
- return -1;
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_set_app_info
-* Description : set app info to netconn
-* Input : sbr_socket_t * sk
-* void* appinfo
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-void
-sbr_com_set_app_info (sbr_socket_t * sk, void *appinfo)
-{
- return;
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h b/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h
deleted file mode 100644
index 1be44cb..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h
+++ /dev/null
@@ -1,162 +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.
-*/
-
-#ifndef STACKX_PROT_COM_H
-#define STACKX_PROT_COM_H
-#include "stackx_socket.h"
-#include "stackx_ip_addr.h"
-#include "stackx_res_mgr.h"
-#include "stackx_pbuf.h"
-#include "stackx_macro.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define MAX_RECV_FREE_BUF 32
-#define MAX_RECV_FREE_LEN (SPL_FRAME_MTU - SPL_IP_HLEN)
-#define USEC_TO_SEC 1000000
-
-#ifndef NSTACK_SOCKOPT_CHECK
-#define NSTACK_SOCKOPT_CHECK
-/* setsockopt level type*/
-enum
-{
- NSTACK_SOCKOPT = 0xff02
-};
-/*setsockopt optname type*/
-enum
-{
- NSTACK_SEM_SLEEP = 0X001
-};
-#endif
-
-#define sbr_malloc_tx_pbuf(len, offset) sbr_malloc_pbuf(sbr_get_tx_pool(), len, TX_MBUF_MAX_LEN, offset)
-
-static inline int
-sbr_spl_err_to_errno (i32 err)
-{
- static int table[] = {
- 0, /* ERR_OK 0 No error, everything OK. */
- ENOMEM, /* ERR_MEM -1 Out of memory error. */
- ENOBUFS, /* ERR_BUF -2 Buffer error. */
- ETIMEDOUT, /* ERR_TIMEOUT -3 Timeout */
- EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */
- EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */
- EINVAL, /* ERR_VAL -6 Illegal value. */
- EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */
- EADDRINUSE, /* ERR_USE -8 Address in use. */
- EISCONN, /* ERR_ISCONN -9 Already connected. */
- ECONNABORTED, /* ERR_ABRT -10 Connection aborted. */
- ECONNRESET, /* ERR_RST -11 Connection reset. */
- ENOTCONN, /* ERR_CLSD -12 Connection closed. */
- ENOTCONN, /* ERR_CONN -13 Not connected. */
- EIO, /* ERR_ARG -14 Illegal argument. */
- -1, /* ERR_IF -15 Low-level netif error */
- EALREADY, /*ERR_ALREADY -16 previous connect attemt has not yet completed */
- EPROTOTYPE, /*ERR_PROTOTYPE -17 prototype error or some other generic error.
- the operation is not allowed on current socket */
- EINVAL, /* ERR_CALLBACK -18 callback error */
- EADDRNOTAVAIL, /* ERR_CANTASSIGNADDR -19 Cannot assign requested address */
- EIO, /* ERR_CONTAINER_ID -20 Illegal container id */
- ENOTSOCK, /*ERR_NOTSOCK -21 not a socket */
- -1, /* ERR_CLOSE_WAIT -22 closed in established state */
- EPROTONOSUPPORT, /* ERR_EPROTONOSUPPORT -23 Protocol not supported */
- ECONNABORTED /* ERR_FAULTRECOVERY -24 SPL just recovered from a fatal fault */
- };
-
- if (((-(err)) >= 0)
- && (-(err)) < (i32) (sizeof (table) / sizeof (table[0])))
- {
- return table[-(err)];
- }
- else
- {
- return EIO;
- }
-}
-
-int sbr_getsockopt_sol_socket (sbr_socket_t * sk, int optname, void *optval,
- socklen_t optlen);
-int sbr_getsockopt_ipproto_ip (int optname, void *optval, socklen_t optlen);
-int sbr_setsockopt_sol_socket (sbr_socket_t * sk, int optname,
- const void *optval, socklen_t optlen,
- spl_netconn_type_t type);
-int sbr_setsockopt_ipproto_ip (int optname, const void *optval,
- socklen_t optlen, spl_netconn_type_t type);
-int sbr_dequeue_buf (sbr_socket_t * sk, void **buf, i32 timeout);
-int sbr_com_peak (sbr_socket_t * sk);
-int sbr_com_try_lock_recv (sbr_socket_t * sk);
-/*****************************************************************************
-* Prototype : sbr_com_lock_recv
-* Description : lock recv
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_com_lock_recv (sbr_socket_t * sk)
-{
-#ifdef SBR_USE_LOCK
- while (!common_spinlock_try_lock_with_pid
- (&sbr_get_fd_share (sk)->recv_lock, get_sys_pid ()))
- {
- sys_sleep_ns (0, 0);
- }
-#endif
-
-}
-
-/*****************************************************************************
-* Prototype : sbr_com_unlock_recv
-* Description : unlock recv
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_com_unlock_recv (sbr_socket_t * sk)
-{
-#ifdef SBR_USE_LOCK
- common_spinlock_unlock (&sbr_get_fd_share (sk)->recv_lock);
-#endif
-}
-
-void sbr_com_lock_common (sbr_socket_t * sk);
-void sbr_com_unlock_common (sbr_socket_t * sk);
-void sbr_com_free_recv_buf (sbr_socket_t * sk, struct spl_pbuf *p);
-int sbr_get_sockaddr_and_len (u16 port, spl_ip_addr_t * ip_addr,
- struct sockaddr *addr, socklen_t * addrlen);
-void sbr_com_set_app_info (sbr_socket_t * sk, void *appinfo);
-
-void sbr_com_fork_parent (sbr_socket_t * sk, pid_t p);
-void sbr_com_fork_child (sbr_socket_t * sk, pid_t p, pid_t c);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_protocol_api.c b/stacks/lwip_stack/lwip_src/socket/stackx_protocol_api.c
deleted file mode 100644
index 0be8d7b..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_protocol_api.c
+++ /dev/null
@@ -1,113 +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 "sbr_protocol_api.h"
-#include "stackx_epoll_api.h"
-#include "stackx_socket.h"
-#include "stackx_res_mgr.h"
-#include "stackx_common_opt.h"
-#include "common_mem_api.h"
-#include "stackx_event.h"
-
-extern sbr_fdopt tcp_fdopt;
-extern sbr_fdopt udp_fdopt;
-extern sbr_fdopt raw_fdopt;
-extern sbr_fdopt custom_fdopt;
-
-/*****************************************************************************
-* Prototype : sbr_init_protocol
-* Description : init protocol
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_init_protocol ()
-{
- return sbr_init_stackx ();
-}
-
-/*****************************************************************************
-* Prototype : sbr_fork_protocol
-* Description : init protocol
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_fork_protocol ()
-{
- pid_t pid = update_sys_pid ();
-
- NSSBR_LOGINF ("update pid in child]pid=%d", pid);
- return sbr_fork_stackx ();
-}
-
-/*****************************************************************************
-* Prototype : sbr_get_fdopt
-* Description : get fdopt by domain type protocol
-* Input : int domain
-* int type
-* int protocol
-* Output : None
-* Return Value : sbr_fdopt*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-sbr_fdopt *
-sbr_get_fdopt (int domain, int type, int protocol)
-{
- if (domain != AF_INET)
- {
- NSSBR_LOGERR ("domain is not AF_INET]domain=%d", domain);
- sbr_set_errno (EAFNOSUPPORT);
- return NULL;
- }
-
- sbr_fdopt *fdopt = NULL;
-
- switch (type & (~(O_NONBLOCK | SOCK_CLOEXEC)))
- {
- case SOCK_DGRAM:
- fdopt = &udp_fdopt;
- break;
- case SOCK_STREAM:
- fdopt = &tcp_fdopt;
- break;
-
- default:
- NSSBR_LOGDBG ("type is unknown]type=%d", type);
- sbr_set_errno (ESOCKTNOSUPPORT);
- return NULL;
- }
-
- return fdopt;
-}
-
-/* app send its version info to nStackMain */
-extern void sbr_handle_app_touch (void);
-void
-sbr_app_touch_in (void)
-{
- sbr_handle_app_touch ();
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.c b/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.c
deleted file mode 100644
index f3cb5b5..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.c
+++ /dev/null
@@ -1,279 +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_res_mgr.h"
-#include "stackx_common.h"
-#include "nstack_securec.h"
-#include "nsfw_msg.h"
-#include "stackx_common.h"
-#include "nsfw_mgr_com_api.h"
-#include "stackx_cfg.h"
-#include "nsfw_maintain_api.h"
-//#include "stackx_dfx_api.h"
-#include "stackx_app_res.h"
-
-sbr_share_group g_share_group = { 0 };
-
-#define SLOW_SLEEP_TIME 500000
-
-NSTACK_STATIC inline void
-sbr_reset_fd_share (sbr_fd_share * fd_share)
-{
- common_mem_spinlock_init (&fd_share->recv_lock);
- common_mem_spinlock_init (&fd_share->common_lock);
- fd_share->err = 0;
- fd_share->lastoffset = 0;
- fd_share->lastdata = NULL;
- fd_share->recoder.head = NULL;
- fd_share->recoder.tail = NULL;
- fd_share->recoder.totalLen = 0;
- fd_share->recv_timeout = 0;
- fd_share->send_timeout = 0;
- fd_share->rcvlowat = 1;
- fd_share->block_polling_time = SLOW_SLEEP_TIME;
-}
-
-/*****************************************************************************
-* Prototype : sbr_init_tx_pool
-* Description : get tx buf pool
-* Input : None
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-sbr_init_tx_pool ()
-{
- mpool_handle pool[1];
- pool[0] = NULL;
-
- (void) sbr_malloc_tx_pool (get_sys_pid (), pool, 1);
- if (pool[0])
- {
- g_share_group.tx_pool = pool[0];
- return 0;
- }
-
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_init_app_res
-* Description : get msg, conn pool
-* Input : None
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-sbr_init_app_res ()
-{
- g_share_group.conn_pool = sbr_get_instance_conn_pool (0);
- if (!g_share_group.conn_pool)
- {
- return -1;
- }
-
- return 0;
-}
-
-/*=========== get share config for app =============*/
-NSTACK_STATIC inline int
-get_share_config ()
-{
- static nsfw_mem_name g_cfg_mem_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, NSTACK_SHARE_CONFIG };
-
- mzone_handle base_cfg_mem = nsfw_mem_zone_lookup (&g_cfg_mem_info);
- if (NULL == base_cfg_mem)
- {
- NSSOC_LOGERR ("get config share mem failed.");
- return -1;
- }
-
- if (get_share_cfg_from_mem (base_cfg_mem) < 0)
- {
- NSSOC_LOGERR ("get share config failed.");
- return -1;
- }
-
- NSSOC_LOGDBG ("get share config success.");
- return 0;
-}
-
-int
-nstack_set_share_config ()
-{
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_init_stackx
-* Description : init stackx res
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_init_stackx ()
-{
- sbr_init_cfg ();
- if (get_share_config () < 0)
- {
- NSSBR_LOGERR ("get_share_config failed");
- return -1;
- }
-
- if (sbr_attach_group_array () != 0)
- {
- NSSBR_LOGERR ("sbr_attach_group_array failed");
- return -1;
- }
-
- NSSBR_LOGDBG ("sbr_attach_group_array ok");
-
- if (sbr_init_tx_pool () != 0)
- {
- NSSBR_LOGERR ("init tx pool failed");
- return -1;
- }
-
- NSSBR_LOGDBG ("init tx pool ok");
-
- if (sbr_init_app_res () != 0)
- {
- NSSBR_LOGERR ("sbr_init_app_res failed");
- return -1;
- }
-
- NSSBR_LOGDBG ("sbr_init_app_res ok");
- NSSBR_LOGDBG ("sbr_init_stackx ok");
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_fork_stackx
-* Description : init stackx res
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_fork_stackx ()
-{
-
- if (sbr_attach_group_array () != 0)
- {
- NSSBR_LOGERR ("sbr_attach_group_array failed");
- return -1;
- }
-
- NSSBR_LOGDBG ("sbr_attach_group_array ok");
-
- if (sbr_init_tx_pool () != 0)
- {
- NSSBR_LOGERR ("init tx pool failed");
- return -1;
- }
-
- NSSBR_LOGDBG ("init tx pool ok");
- NSSBR_LOGDBG ("sbr_fork_stackx ok");
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_malloc_conn_for_sk
-* Description : malloc netconn for sk,need add pid
-* Input : sbr_socket_t* sk
-* netconn_type_t type
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_malloc_conn_for_sk (sbr_socket_t * sk, spl_netconn_type_t type)
-{
- spl_netconn_t *conn = ss_malloc_conn_app (g_share_group.conn_pool, type);
-
- if (!conn)
- {
- NSSBR_LOGERR ("malloc conn failed]fd=%d", sk->fd);
- sbr_set_errno (ENOBUFS);
- return -1;
- }
-
- NSSBR_LOGINF ("malloc conn ok]fd=%d,conn=%p", sk->fd, conn);
-
- u16 thread_index = 0;
- ss_set_bind_thread_index (conn, thread_index);
- ss_set_msg_box (conn, ss_get_instance_msg_box (thread_index, 0));
-
- sbr_fd_share *fd_share = (sbr_fd_share *) ((char *) conn + SS_NETCONN_SIZE);
- sbr_reset_fd_share (fd_share);
-
- sk->stack_obj = (void *) conn;
- sk->sk_obj = (void *) fd_share;
- return 0;
-}
-
-int
-sbr_init_conn_for_accept (sbr_socket_t * sk, spl_netconn_t * conn)
-{
- if (!conn)
- {
- sbr_set_sk_errno (sk, ENOBUFS);
- return -1;
- }
-
- NSSBR_LOGINF ("accept conn ok]fd=%d,conn=%p,private_data=%p", sk->fd, conn,
- conn->private_data);
-
- if (ss_add_pid (conn, get_sys_pid ()) < 0)
- {
- NSSBR_LOGERR ("ss_add_pid failed]fd=%d", sk->fd);
- }
-
- ss_set_accept_from (conn, NULL); /* need clear flag */
-
- sbr_fd_share *fd_share = (sbr_fd_share *) ((char *) conn + SS_NETCONN_SIZE);
- sbr_reset_fd_share (fd_share);
-
- sk->stack_obj = (void *) conn;
- sk->sk_obj = (void *) fd_share;
-
- return 0;
-}
-
-void
-sbr_free_conn_from_sk (sbr_socket_t * sk)
-{
- ss_free_conn (sbr_get_conn (sk));
- sk->stack_obj = NULL;
- sk->sk_obj = NULL;
- NSSBR_LOGDBG ("free conn ok]fd=%d", sk->fd);
-}
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.h b/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.h
deleted file mode 100644
index 73cec7f..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_res_mgr.h
+++ /dev/null
@@ -1,70 +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.
-*/
-
-#ifndef STACKX_RES_MGR_H
-#define STACKX_RES_MGR_H
-#include "stackx_socket.h"
-#include "stackx_ip_tos.h"
-#include "stackx_tx_box.h"
-#include "stackx_app_res.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef struct
-{
- mring_handle conn_pool;
- mpool_handle tx_pool;
-} sbr_share_group;
-
-extern sbr_share_group g_share_group;
-
-static inline mpool_handle
-sbr_get_tx_pool ()
-{
- return g_share_group.tx_pool;
-}
-
-static inline mring_handle
-sbr_get_conn_pool ()
-{
- return (mring_handle) ADDR_LTOSH (g_share_group.conn_pool);
-}
-
-static inline mring_handle
-sbr_get_spl_msg_box (sbr_socket_t * sk, u8 tos)
-{
- return
- ss_get_instance_msg_box (ss_get_bind_thread_index (sbr_get_conn (sk)),
- stackx_get_prio (tos));
-}
-
-int sbr_init_stackx ();
-int sbr_fork_stackx ();
-int sbr_malloc_conn_for_sk (sbr_socket_t * sk, spl_netconn_type_t type);
-int sbr_init_conn_for_accept (sbr_socket_t * sk, spl_netconn_t * conn);
-void sbr_free_conn_from_sk (sbr_socket_t * sk);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_socket.h b/stacks/lwip_stack/lwip_src/socket/stackx_socket.h
deleted file mode 100644
index e344535..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_socket.h
+++ /dev/null
@@ -1,141 +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.
-*/
-
-#ifndef STACKX_SOCKET_H
-#define STACKX_SOCKET_H
-#include "sbr_protocol_api.h"
-#include "stackx_spl_share.h"
-#include "nstack_log.h"
-#include "stackx_pbuf.h"
-#include "common_mem_spinlock.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef struct
-{
- PRIMARY_ADDR struct spl_pbuf *head;
- PRIMARY_ADDR struct spl_pbuf *tail;
- int totalLen;
-} sbr_recvbuf_recoder;
-
-/* need fork and recycle */
-typedef struct
-{
- common_mem_spinlock_t recv_lock;
- common_mem_spinlock_t common_lock;
- PRIMARY_ADDR void *lastdata;
- u32 lastoffset;
- sbr_recvbuf_recoder recoder;
- i32 recv_timeout;
- i32 send_timeout;
- i32 rcvlowat;
- int err;
- u64 block_polling_time;
- i64 extend_member_bit;
-} sbr_fd_share;
-
-/* check sbr_fd_share size */
-SIZE_OF_TYPE_NOT_LARGER_THAN (sbr_fd_share, SBR_FD_SIZE);
-
-#define sbr_get_fd_share(sk) ((sbr_fd_share*)sk->sk_obj)
-
-#define sbr_get_conn(sk) ((spl_netconn_t*)sk->stack_obj)
-
-#define sbr_get_msg_box(sk) ss_get_msg_box(sbr_get_conn(sk))
-
-/*****************************************************************************
-* Prototype : sbr_set_sk_errno
-* Description : set errno for sk
-* Input : sbr_socket_t * sk
-* int err
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_set_sk_errno (sbr_socket_t * sk, int err)
-{
- sbr_get_fd_share (sk)->err = err;
- if (err != 0)
- {
- if (sbr_get_conn (sk))
- {
- NSSBR_LOGERR ("fd=%d,errno=%d,conn=%p,private_data=%p", sk->fd, err,
- sbr_get_conn (sk),
- ss_get_private_data (sbr_get_conn (sk)));
- }
-
- sbr_set_errno (err);
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_set_sk_io_errno
-* Description : set errno for sk in send/recv func, in case of too many logs
-* Input : sbr_socket_t * sk
-* int err
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_set_sk_io_errno (sbr_socket_t * sk, int err)
-{
- sbr_get_fd_share (sk)->err = err;
- if (err != 0)
- {
- if (sbr_get_conn (sk))
- {
- NSSBR_LOGDBG ("fd=%d,errno=%d,conn=%p,private_data=%p", sk->fd, err,
- sbr_get_conn (sk),
- ss_get_private_data (sbr_get_conn (sk)));
- }
-
- sbr_set_errno (err);
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_get_sk_errno
-* Description : get sk's errno
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_get_sk_errno (sbr_socket_t * sk)
-{
- return sbr_get_fd_share (sk)->err;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_tcp.c b/stacks/lwip_stack/lwip_src/socket/stackx_tcp.c
deleted file mode 100644
index a410a4f..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_tcp.c
+++ /dev/null
@@ -1,1691 +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_prot_com.h"
-#include "stackx_msg_handler.h"
-#include "stackx_pbuf.h"
-#include "stackx_epoll_api.h"
-#include "nstack_securec.h"
-#include "common_pal_bitwide_adjust.h"
-#include "common_mem_mbuf.h"
-#include "stackx_spl_share.h"
-#include "stackx_err.h"
-#include "stackx_cfg.h"
-#include "spl_opt.h"
-//#include "stackx_tcp_sctl.h"
-#include "stackx_tcp_opt.h"
-//#include "stackx_dfx_api.h"
-#include "stackx_spl_msg.h"
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-
-static void
-sbr_tcp_init_conn (spl_netconn_t * conn)
-{
- conn->tcp_sndbuf = CONN_TCP_MEM_DEF_LINE;
- conn->conn_pool = sbr_get_conn_pool ();
-}
-
-/* need close after accept failed */
-static void
-sbr_tcp_accept_failed (sbr_socket_t * sk)
-{
- (void) sbr_handle_close (sk, 0);
- sk->stack_obj = NULL;
- sk->sk_obj = NULL;
-}
-
-NSTACK_STATIC int
-sbr_tcp_socket (sbr_socket_t * sk, int domain, int type, int protocol)
-{
- int err = 0;
-
- if (sbr_malloc_conn_for_sk (sk, SPL_NETCONN_TCP) != 0)
- {
- return -1;
- }
-
- sbr_tcp_init_conn (sbr_get_conn (sk));
-
- err = sbr_handle_socket (sk, SPL_NETCONN_TCP, 0);
- if (0 == err)
- {
- /* Prevent automatic window updates, we do this on our own! */
- ss_set_noautorecved_flag (sbr_get_conn (sk), 1);
-
- ss_set_nonblock_flag (sbr_get_conn (sk), (type & O_NONBLOCK));
-
- ss_add_recv_event (sbr_get_conn (sk));
-
- ss_set_send_event (sbr_get_conn (sk), 1);
-
- NSSBR_LOGINF ("add write and read events]fd=%d", sk->fd);
-
- return 0;
- }
- else
- {
- sbr_free_conn_from_sk (sk);
- return err;
- }
-}
-
-NSTACK_STATIC int
-sbr_tcp_bind (sbr_socket_t * sk, const struct sockaddr *name,
- socklen_t namelen)
-{
- const struct sockaddr_in *addr_in = (const struct sockaddr_in *) name;
- NSSBR_LOGINF ("fd=%d,addr=%s,port=%d,conn=%p,private_data=%p", sk->fd,
- spl_inet_ntoa (addr_in->sin_addr), ntohs (addr_in->sin_port),
- sbr_get_conn (sk), ss_get_private_data (sbr_get_conn (sk)));
- spl_ip_addr_t local_addr;
- inet_addr_to_ipaddr (&local_addr, &addr_in->sin_addr);
- u16 local_port = addr_in->sin_port;
- return sbr_handle_bind (sk, &local_addr, ntohs (local_port));
-}
-
-NSTACK_STATIC int
-sbr_tcp_listen (sbr_socket_t * sk, int backlog)
-{
- ss_set_is_listen_conn (sbr_get_conn (sk), 1);
- return sbr_handle_listen (sk, backlog);
-}
-
-static inline int
-sbr_tcp_recv_is_timeout (sbr_socket_t * sk, struct timespec *starttm)
-{
- struct timespec currtm;
- i64 timediff_ms, timediff_sec;
- i64 timeout_thr_ms, timeout_thr_sec;
-
- timeout_thr_ms = sbr_get_fd_share (sk)->recv_timeout;
- if (0 == timeout_thr_ms)
- {
- return ERR_OK;
- }
-
- timeout_thr_sec = (i64) (timeout_thr_ms / 1000);
-
- /* Handle system time change side-effects */
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &currtm)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
-
- timediff_sec = currtm.tv_sec - starttm->tv_sec;
- if (timediff_sec >= timeout_thr_sec)
- {
- timediff_ms = currtm.tv_nsec > starttm->tv_nsec ?
- (timediff_sec * 1000) + (currtm.tv_nsec -
- starttm->tv_nsec) /
- USEC_TO_SEC : (timediff_sec * 1000) -
- ((starttm->tv_nsec - currtm.tv_nsec) / USEC_TO_SEC);
-
- /*NOTE: if user configured the timeout as say 0.5 ms, then timediff value
- will be negetive if still 0.5 ms is not elapsed. this is intended and we should
- not typecast to any unsigned type during this below if check */
- if (timediff_ms > timeout_thr_ms)
- {
- sbr_set_sk_errno (sk, ETIMEDOUT);
- return ETIMEDOUT;
- }
- }
-
- return ERR_OK;
-}
-
-static inline int
-sbr_tcp_wait_new_conn (sbr_socket_t * sk, void **new_buf)
-{
- int ret = 0;
- int elem_num;
- u32 timeout_thr_sec;
- struct timespec starttm = { 0, 0 };
- unsigned int retry_count = 0;
- mring_handle ring = NULL;
-
-#define FAST_SLEEP_TIME 10000
-#define SLOW_SLEEP_TIME 500000
-#define FAST_RETRY_COUNT 100
-
- ring = ss_get_recv_ring (sbr_get_conn (sk)); //clear codeDEX warning , CID:24284
- timeout_thr_sec = sbr_get_fd_share (sk)->recv_timeout / 1000;
- if (0 != timeout_thr_sec)
- {
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &starttm)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
- }
-
- while (1)
- {
- if (ss_is_shut_rd (sbr_get_conn (sk)))
- {
- sbr_set_sk_errno (sk, EINVAL);
- ret = EINVAL;
- break;
- }
-
- elem_num = nsfw_mem_ring_dequeue (ring, new_buf);
- if (1 == elem_num)
- {
- break;
- }
- else if (0 == elem_num)
- {
- ret = sbr_tcp_recv_is_timeout (sk, &starttm);
- if (0 != ret)
- {
- break;
- }
-
- /* reduce CPU usage in blocking mode- Begin */
- if (retry_count < FAST_RETRY_COUNT)
- {
- sys_sleep_ns (0, FAST_SLEEP_TIME);
- retry_count++;
- }
- else
- {
- sys_sleep_ns (0, sbr_get_fd_share (sk)->block_polling_time);
- }
-
- continue;
- }
- else
- {
- sbr_set_sk_errno (sk, EINVAL);
- ret = EINVAL;
- break;
- }
- }
-
- return ret;
-}
-
-NSTACK_STATIC inline int
-sbr_tcp_get_sockaddr (sbr_socket_t * sk, struct sockaddr *addr,
- socklen_t * addrlen)
-{
- int ret;
- spl_netconn_t *conn = sbr_get_conn (sk);
-
- ret = (addr
- && addrlen) ? sbr_get_sockaddr_and_len (ss_get_remote_port (conn),
- ss_get_remote_ip (conn),
- addr, addrlen) : 0;
- if (0 != ret)
- {
- sbr_set_sk_io_errno (sk, EINVAL);
- NSSBR_LOGERR ("sbr_tcp_get_sockaddr]fd=%d", sk->fd);
- return -1;
- }
-
- return 0;
-}
-
-static int
-sbr_tcp_accept_socket (sbr_socket_t * sk, sbr_socket_t * new_sk,
- struct sockaddr *addr, socklen_t * addrlen)
-{
- int err;
- spl_netconn_t *newconn = NULL;
-
- err = sbr_tcp_wait_new_conn (sk, (void **) &newconn);
- if (ERR_OK != err)
- {
- return err;
- }
-
- err = sbr_init_conn_for_accept (new_sk, newconn);
- if (ERR_OK != err)
- {
- /*When conn is null, return err; then do not need to free conn */
- return err;
- }
-
- err = sbr_tcp_get_sockaddr (new_sk, addr, addrlen);
- if (ERR_OK != err)
- {
- NSSBR_LOGERR ("sbr_get_sockaddr_and_socklen]ret=%d.", err);
- sbr_tcp_accept_failed (new_sk);
- return -1;
- }
-
- NSSBR_LOGINF
- ("return]listen fd=%d,listen conn=%p,listen private_data=%p,accept fd=%d,accept conn=%p,accept private_data=%p",
- sk->fd, sbr_get_conn (sk), ss_get_private_data (sbr_get_conn (sk)),
- new_sk->fd, sbr_get_conn (new_sk),
- ss_get_private_data (sbr_get_conn (new_sk)));
-
- //ip_addr_info_print(SOCKETS_DEBUG, &sbr_get_conn(new_sk)->share_remote_ip);
-
- /* test_epollCtl_003_001: Accept a conn. Add epoll_ctl with IN event and
- send a msg from peer. The event will be given once epoll_wait is called.
- Now, modify to IN|OUT. Calling epoll_event should return immediately since
- the socket is writable. Currently, returns 0 events.
- This issue is fixed here
- */
-
- /* Prevent automatic window updates, we do this on our own! */
- ss_set_noautorecved_flag (sbr_get_conn (new_sk), 1);
-
- ss_set_send_event (sbr_get_conn (new_sk), 1);
-
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
-}
-
-NSTACK_STATIC int
-sbr_tcp_accept (sbr_socket_t * sk, sbr_socket_t * new_sk,
- struct sockaddr *addr, socklen_t * addrlen)
-{
- int err;
-
- /* If conn is not in listen state then return failure with error code: EINVAL(22) */
- if (!ss_is_listen_state (sbr_get_conn (sk)))
- {
- NSSBR_LOGERR ("fd is not listening for connections]fd=%d,err=%d",
- sk->fd, EINVAL);
- sbr_set_sk_errno (sk, EINVAL);
-
- return -1;
- }
-
- if (ss_is_nonblock_flag (sbr_get_conn (sk))
- && (0 >= ss_get_recv_event (sbr_get_conn (sk))))
- {
- NSSBR_LOGERR ("fd is nonblocking and rcvevent<=0]fd=%d,err=%d", sk->fd,
- EWOULDBLOCK);
- sbr_set_sk_errno (sk, EWOULDBLOCK);
-
- return -1;
- }
-
- err = ss_get_last_errno (sbr_get_conn (sk));
- if (SPL_ERR_IS_FATAL (err))
- {
- /* don't recv on fatal errors: this might block the application task
- waiting on acceptmbox forever! */
- sbr_set_sk_errno (sk, sbr_spl_err_to_errno (err));
-
- return -1;
- }
-
- /* wait for a new connection */
- err = sbr_tcp_accept_socket (sk, new_sk, addr, addrlen);
- if (ERR_OK != err)
- {
- NSSBR_LOGERR ("sbr_tcp_accept_socket failed]fd=%d,err=%d", sk->fd, err);
-
- return -1;
- }
-
- /* Prevent automatic window updates, we do this on our own! */
- ss_sub_recv_event (sbr_get_conn (sk));
-
- sbr_set_sk_errno (sk, ERR_OK);
-
- /* test_epollCtl_003_001: Accept a conn. Add epoll_ctl with IN event and
- send a msg from peer. The event will be given once epoll_wait is called.
- Now, modify to IN|OUT. Calling epoll_event should return immediately since
- the socket is writable. Currently, returns 0 events.
- This issue is fixed here
- */
-
- ss_set_send_event (sbr_get_conn (new_sk), 1);
-
- return new_sk->fd;
-}
-
-NSTACK_STATIC int
-sbr_tcp_accept4 (sbr_socket_t * sk, sbr_socket_t * new_sk,
- struct sockaddr *addr, socklen_t * addrlen, int flags)
-{
- int fd = sbr_tcp_accept (sk, new_sk, addr, addrlen);
-
- if (0 > fd)
- {
- return fd;
- }
-
- if (flags & O_NONBLOCK)
- {
- int opts = new_sk->fdopt->fcntl (new_sk, F_GETFL, 0);
- if (opts < 0)
- {
- NSSBR_LOGERR ("sbr_tcp_fcntl(sock,GETFL)");
- sbr_tcp_accept_failed (new_sk);
- return -1;
- }
-
- opts = opts | O_NONBLOCK;
-
- if (new_sk->fdopt->fcntl (new_sk, F_SETFL, opts) < 0)
-
- {
- NSSBR_LOGERR ("sbr_tcp_fcntl(sock,F_SETFL,opts)");
- sbr_tcp_accept_failed (new_sk);
- return -1;
- }
- }
-
- return new_sk->fd;
-}
-
-NSTACK_STATIC int
-sbr_tcp_connect (sbr_socket_t * sk, const struct sockaddr *name,
- socklen_t namelen)
-{
- const struct sockaddr_in *addr_in = (const struct sockaddr_in *) name;
-
- NSSBR_LOGINF ("fd=%d,addr=%s,port=%d,conn=%p,private_data=%p", sk->fd,
- spl_inet_ntoa (addr_in->sin_addr), ntohs (addr_in->sin_port),
- sbr_get_conn (sk), ss_get_private_data (sbr_get_conn (sk)));
- spl_ip_addr_t remote_addr;
-
- inet_addr_to_ipaddr (&remote_addr, &addr_in->sin_addr);
- u16 remote_port = addr_in->sin_port;
-
- spl_ip_addr_t local_addr = { IPADDR_ANY };
-
- if (sbr_handle_connect (sk, &remote_addr, ntohs (remote_port), &local_addr)
- != 0)
- {
- NSSBR_LOGERR ("fail]fd=%d", sk->fd);
- return -1;
- }
-
- if (ss_is_shut_rd (sbr_get_conn (sk)))
- {
- NSSBR_LOGERR ("shut_rd]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ECONNRESET);
- return -1;
- }
-
- NSSBR_LOGINF ("succeeded]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ERR_OK);
-
- return 0;
-}
-
-static u8 netconn_shutdown_opt[] = {
- SPL_NETCONN_SHUT_RD,
- SPL_NETCONN_SHUT_WR,
- SPL_NETCONN_SHUT_RDWR
-};
-
-NSTACK_STATIC int
-sbr_tcp_shutdown (sbr_socket_t * sk, int how)
-{
- err_t err;
-
- if (ss_is_listen_state (sbr_get_conn (sk)))
- {
- return 0;
- }
-
- ss_set_shut_status (sbr_get_conn (sk), how);
-
- err = sbr_handle_shutdown (sk, netconn_shutdown_opt[how]);
-
- return (err == ERR_OK ? 0 : -1);
-}
-
-NSTACK_STATIC int
-sbr_tcp_getsockname (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen)
-{
-
- NSSBR_LOGINF ("sockname]fd=%d,tcp_state=%d", sk->fd,
- ss_get_tcp_state (sbr_get_conn (sk)));
-
- return sbr_handle_get_name (sk, name, namelen, SBR_GET_SOCK_NAME);
-}
-
-NSTACK_STATIC int
-sbr_tcp_getpeername (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen)
-{
-
- if (SPL_CLOSED == ss_get_tcp_state (sbr_get_conn (sk)))
- {
- NSSBR_LOGERR ("connection not exist]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, ENOTCONN);
- return -1;
- }
-
- NSSBR_LOGINF ("peername]fd=%d,tcp_state=%d", sk->fd,
- ss_get_tcp_state (sbr_get_conn (sk)));
-
- return sbr_handle_get_name (sk, name, namelen, SBR_GET_PEER_NAME);
-}
-
-static int
-sbr_getsockopt_ipproto_tcp (int optname, void *optval, socklen_t optlen)
-{
- int err = ERR_OK;
-
- switch (optname)
- {
- case SPL_TCP_NODELAY:
- break;
- case SPL_TCP_KEEPIDLE:
- case SPL_TCP_KEEPINTVL:
- case SPL_TCP_KEEPCNT:
- case SPL_TCP_INFO:
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-NSTACK_STATIC int inline
-sbr_tcp_set_sockopt_err (sbr_socket_t * sk, int err)
-{
- if (ENOPROTOOPT == err)
- {
- return 0;
- }
- else
- {
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-}
-
-NSTACK_STATIC int inline
-sbr_tcp_get_sockopt_err (sbr_socket_t * sk, int err)
-{
- sbr_set_sk_errno (sk, err);
- return -1;
-}
-
-NSTACK_STATIC int
-sbr_tcp_getsockopt (sbr_socket_t * sk, int level, int optname, void *optval,
- socklen_t * optlen)
-{
- int err = 0;
-
- switch (level)
- {
- case SOL_SOCKET:
- err = sbr_getsockopt_sol_socket (sk, optname, optval, *optlen);
- break;
-
- case IPPROTO_IP:
- err = sbr_getsockopt_ipproto_ip (optname, optval, *optlen);
- break;
-
- case IPPROTO_TCP:
- err = sbr_getsockopt_ipproto_tcp (optname, optval, *optlen);
- break;
-
- case NSTACK_SOCKOPT:
- if ((optname == NSTACK_SEM_SLEEP) || (*optlen < sizeof (u32_t)))
- {
- *(u32_t *) optval =
- sbr_get_fd_share (sk)->block_polling_time / 1000;
- NSSOC_LOGINF
- ("tcp get recv sleep time success, usleep time = %d,fd = %d",
- sbr_get_fd_share (sk)->block_polling_time, sk->fd);
- return ERR_OK;
- }
- else
- {
- NSSOC_LOGINF ("get recv sleep time failed, fd = %d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- if (0 != err)
- {
- NSSBR_LOGERR ("fail]fd=%d,level=%d,optname=%d,err=%d", sk->fd, level,
- optname, err);
- /* for option not support ,getsockopt() should return fail */
- return sbr_tcp_get_sockopt_err (sk, err);
- }
-
- return sbr_handle_getsockopt (sk, level, optname, optval, optlen);
-}
-
-int
-sbr_setsockopt_ipproto_tcp (int optname, socklen_t optlen)
-{
- int err = 0;
-
- if (optlen < sizeof (int))
- {
- return EINVAL;
- }
-
- switch (optname)
- {
- case SPL_TCP_NODELAY:
- case SPL_TCP_KEEPIDLE:
- case SPL_TCP_KEEPINTVL:
- case SPL_TCP_KEEPCNT:
- break;
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- return err;
-}
-
-NSTACK_STATIC int
-sbr_tcp_setsockopt (sbr_socket_t * sk, int level, int optname,
- const void *optval, socklen_t optlen)
-{
- int err = 0;
-
- switch (level)
- {
- case SOL_SOCKET:
- err =
- sbr_setsockopt_sol_socket (sk, optname, optval, optlen,
- SPL_NETCONN_TCP);
- break;
- case IPPROTO_IP:
- err =
- sbr_setsockopt_ipproto_ip (optname, optval, optlen, SPL_NETCONN_TCP);
- break;
- case IPPROTO_TCP:
- err = sbr_setsockopt_ipproto_tcp (optname, optlen);
- break;
- case NSTACK_SOCKOPT:
- {
- u32_t sleep_time = *(u32_t *) optval;
- /*sleep time should less than 1s */
- if ((optname == NSTACK_SEM_SLEEP) && (optlen >= sizeof (u32_t))
- && (sleep_time < 1000000))
- {
- sbr_get_fd_share (sk)->block_polling_time = sleep_time * 1000;
- NSSOC_LOGINF
- ("tcp set recv sleep time success, usleep time = %d,fd = %d",
- sbr_get_fd_share (sk)->block_polling_time, sk->fd);
- return ERR_OK;
- }
- else
- {
- NSSOC_LOGINF ("set recv sleep time failed, fd = %d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
- }
-
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- if (0 != err)
- {
- NSSBR_LOGERR ("fail]fd=%d,level=%d,optname=%d,err=%d", sk->fd, level,
- optname, err);
-
- return sbr_tcp_set_sockopt_err (sk, err);
- }
-
- return sbr_handle_setsockopt (sk, level, optname, optval, optlen);
-}
-
-static inline u16
-sbr_tcp_mbuf_count (struct spl_pbuf *p)
-{
- u16 count = 0;
- struct spl_pbuf *buf = p;
- struct common_mem_mbuf *mbuf;
-
- while (buf)
- {
- mbuf =
- (struct common_mem_mbuf *) ((char *) buf -
- sizeof (struct common_mem_mbuf));
- while (mbuf)
- {
- count++;
-#ifdef HAL_LIB
-#else
- mbuf = mbuf->next;
-#endif
- }
-
- buf = (struct spl_pbuf *) ADDR_SHTOL (buf->next_a);
- }
-
- return count;
-}
-
-static inline void
-sbr_tcp_free_recvbuf (sbr_socket_t * sk, struct spl_pbuf *p)
-{
- int len;
-
- if (ss_is_noautorecved_flag (sbr_get_conn (sk)))
- {
- len = sbr_tcp_mbuf_count (p);
- sbr_handle_tcp_recv (sk, len, p);
- }
-}
-
-static inline void
-sbr_tcp_recv_no_peak (sbr_socket_t * sk, struct spl_pbuf *buf, u32 buflen,
- u32 copylen)
-{
- if ((buflen - copylen) > 0)
- {
- sbr_get_fd_share (sk)->lastdata = (void *) ADDR_LTOSH (buf);
- sbr_get_fd_share (sk)->lastoffset += copylen;
- }
- else
- {
- sbr_get_fd_share (sk)->lastdata = 0;
- sbr_get_fd_share (sk)->lastoffset = 0;
- sbr_tcp_free_recvbuf (sk, buf);
- }
-}
-
-static inline int
-sbr_tcp_recv_from_ring (sbr_socket_t * sk, struct spl_pbuf **buf, i32 timeout)
-{
- int err;
- spl_netconn_t *conn = sbr_get_conn (sk);
-
- err = ss_get_last_errno (conn);
- if (SPL_ERR_IS_FATAL (err))
- {
- /* don't recv on fatal errors: this might block the application task
- waiting on recvmbox forever! */
-
- /* @todo: this does not allow us to fetch data that has been put into recvmbox
- before the fatal error occurred - is that a problem? */
- NSSBR_LOGDBG ("last err when recv:]=%d", err);
- if (ERR_CLSD != err)
- {
- sbr_set_sk_io_errno (sk, sbr_spl_err_to_errno (err));
- return -1;
- }
- }
-
- *buf = NULL;
- if (0 != sbr_dequeue_buf (sk, (void **) buf, timeout))
- {
- return -1;
- }
-
- ss_sub_recv_avail (sbr_get_conn (sk), (*buf)->tot_len);
-
- ss_sub_recv_event (sbr_get_conn (sk));
-
- return 0;
-}
-
-static inline int
-sbr_tcp_recv_state_check (sbr_socket_t * sk)
-{
-
- spl_tcp_state_t state = ss_get_tcp_state (sbr_get_conn (sk));
-
- NSSBR_LOGDBG ("tcp state when recv:]=%d", state);
-
- //close_wait state also can recive data
- //no connect cannot recive data
- if (SPL_ESTABLISHED > state)
- {
- if (SPL_SHUT_WR != ss_get_shut_status (sbr_get_conn (sk)))
- {
- /* after all data retrnasmission, connection is active */
- /* patch solution as last_err is not maintained properly */
- if ((SPL_CLOSED == state)
- && (ERR_TIMEOUT == ss_get_last_errno (sbr_get_conn (sk))))
- {
- sbr_set_sk_io_errno (sk, ETIMEDOUT);
- }
- else if ((SPL_CLOSED == state)
- && (ERR_RST == ss_get_last_errno (sbr_get_conn (sk))))
- {
- sbr_set_sk_io_errno (sk, ECONNRESET);
- }
- else
- {
- sbr_set_sk_io_errno (sk, ENOTCONN);
- }
-
- return -1;
- }
- }
-
- return 0;
-}
-
-NSTACK_STATIC int
-sbr_tcp_recvfrom (sbr_socket_t * sk, void *mem, size_t len, int flags,
- struct sockaddr *from, socklen_t * fromlen)
-{
- struct spl_pbuf *p;
- u32 buflen;
- u32 copylen;
- u32 off = 0;
- u8 done = 0;
- int para_len = len;
- int retval = 0;
-
- sbr_com_lock_recv (sk);
- NSSOC_LOGINF ("recv start, fd = %d last data %p flags to be set %d", sk->fd,
- ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata), MSG_DONTWAIT);
-
- if (0 != sbr_tcp_recv_state_check (sk))
- {
- retval = -1;
- goto sbr_tcp_recvfrom_exit;
- }
-
- do
- {
- if (sbr_get_fd_share (sk)->lastdata)
- {
- p = ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- }
- else
- {
- if ((flags & MSG_DONTWAIT)
- || ss_is_nonblock_flag (sbr_get_conn (sk)))
- {
- NSSOC_LOGINF ("call ss_get_recv_event");
- if (0 >= ss_get_recv_event (sbr_get_conn (sk)))
- {
- NSSOC_LOGINF ("no recv event]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- retval = -1;
- goto sbr_tcp_recvfrom_exit;
- }
- }
-
- if (0 !=
- sbr_tcp_recv_from_ring (sk, &p,
- sbr_get_fd_share (sk)->recv_timeout))
- {
- /* already received data, return that */
- if (off > 0)
- {
- sbr_set_sk_io_errno (sk, ERR_OK);
- retval = off;
- goto sbr_tcp_recvfrom_exit;
- }
-
- /* we tell the user the connection is closed by returning zero */
- if (sbr_get_sk_errno (sk) == ENOTCONN)
- {
- retval = 0;
- goto sbr_tcp_recvfrom_exit;
- }
-
- retval = -1;
- goto sbr_tcp_recvfrom_exit;
- }
-
- sbr_get_fd_share (sk)->lastdata = (void *) ADDR_LTOSH (p);
- }
-
- buflen = p->tot_len - sbr_get_fd_share (sk)->lastoffset;
- copylen = len > buflen ? buflen : len;
-
- if ((copylen > 0)
- && 0 == spl_pbuf_copy_partial (p, (u8 *) mem + off, copylen,
- sbr_get_fd_share (sk)->lastoffset))
- {
- NSSBR_LOGERR ("copy failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EFAULT);
- retval = -1;
- goto sbr_tcp_recvfrom_exit;
- }
-
- off += copylen;
-
- len -= copylen;
-
- if ((len == 0) || (ss_get_recv_event (sbr_get_conn (sk)) <= 0)
- || ((flags & MSG_PEEK) != 0))
- {
- if ((off >= sbr_get_fd_share (sk)->rcvlowat)
- || (para_len <= sbr_get_fd_share (sk)->rcvlowat))
- {
- done = 1;
- }
- }
-
- if (done)
- {
- if (sbr_tcp_get_sockaddr (sk, from, fromlen) != 0)
- {
- retval = -1;
- goto sbr_tcp_recvfrom_exit;
- }
- }
-
- /* If this is a TCP socket, check if there is data left in the buffer,
- If so, it should be saved in the sock structure for next time around. */
- if (!(flags & MSG_PEEK))
- {
- sbr_tcp_recv_no_peak (sk, p, buflen, copylen);
- }
- }
- while (!done);
-
- retval = off;
-
- NSSOC_LOGINF ("recv done, fd = %d last data %p", sk->fd);
-sbr_tcp_recvfrom_exit:
-
- NSSOC_LOGINF ("recv exit, fd = %d last data %p", sk->fd);
- sbr_com_unlock_recv (sk);
- return retval;
-}
-
-/*****************************************************************************
-* Prototype : sbr_tcp_recvdata
-* Description : recvdata
-* Input : sbr_socket_t* sk
-* const struct iovec* iov
-* int iovcnt
-* int flags
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_tcp_recvdata (sbr_socket_t * sk, const struct iovec *iov, int iovcnt)
-{
- int max = SBR_MAX_INTEGER;
- int len = 0;
- int ret = 0;
- int i = 0;
-
- do
- {
- len += ret;
-
- if (!iov[i].iov_base || (0 == iov[i].iov_len))
- {
- ret = 0;
- continue;
- }
-
- ret = sbr_tcp_recvfrom (sk, (char *) iov[i].iov_base, iov[i].iov_len, 0,
- NULL, NULL);
- }
- while ((ret == (int) iov[i].iov_len) && (iovcnt > (++i))
- && (max - len - ret > (int) iov[i].iov_len));
-
- if (len == 0)
- {
- return ret;
- }
- else
- {
- return (ret == -1 ? len : len + ret);
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_tcp_readv
-* Description : readv
-* Input : sbr_socket_t* sk
-* const struct iovec* iov
-* int iovcnt
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_tcp_readv (sbr_socket_t * sk, const struct iovec *iov, int iovcnt)
-{
- return sbr_tcp_recvdata (sk, iov, iovcnt);
-}
-
-/*****************************************************************************
-* Prototype : sbr_tcp_recvmsg
-* Description : recvmsg,unsupport flags
-* Input : sbr_socket_t* sk
-* struct msghdr* msg
-* int flags
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_tcp_recvmsg (sbr_socket_t * sk, struct msghdr *msg, int flags)
-{
- if (sbr_tcp_get_sockaddr
- (sk, (struct sockaddr *) msg->msg_name, &msg->msg_namelen) != 0)
- {
- return -1;
- }
-
- return sbr_tcp_recvdata (sk, msg->msg_iov, msg->msg_iovlen);
-}
-
-static int
-sbr_tcp_send_is_timeout (sbr_socket_t * sk, struct timespec *starttm)
-{
- struct timespec currtm;
- i64 timediff_ms, timediff_sec;
- i64 timeout_thr_ms, timeout_thr_sec;
-
- timeout_thr_ms = sbr_get_fd_share (sk)->send_timeout;
- if (0 == timeout_thr_ms)
- {
- return 0;
- }
-
- /* it is possible that starttm don't be inited,
- if send_timeout is change when this write function is running */
- timeout_thr_sec = (timeout_thr_ms + 240) >> 10;
-
- /* Handle system time change side-effects */
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &currtm)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
-
- timediff_sec = currtm.tv_sec - starttm->tv_sec;
- if (timediff_sec >= timeout_thr_sec)
- {
- timediff_ms = currtm.tv_nsec > starttm->tv_nsec ?
- (timediff_sec * 1000) + (currtm.tv_nsec -
- starttm->tv_nsec) /
- USEC_TO_SEC : (timediff_sec * 1000) -
- ((starttm->tv_nsec - currtm.tv_nsec) / USEC_TO_SEC);
-
- /*NOTE: if user configured the timeout as say 0.5 ms, then timediff value
- will be negetive if still 0.5 ms is not elapsed. this is intended and we should
- not typecast to any unsigned type during this below if check */
- if (timediff_ms > timeout_thr_ms)
- {
- return 1;
- }
- }
-
- return 0;
-}
-
-static inline int
-sbr_tcp_write_is_wait (sbr_socket_t * sk, struct timespec *starttm,
- int noneblockFlg)
-{
- if (noneblockFlg || sbr_tcp_send_is_timeout (sk, starttm))
- {
- return 0;
- }
- else
- {
- return 1;
- }
-}
-
-static struct spl_pbuf *
-sbr_tcp_write_alloc_buf (sbr_socket_t * sk, size_t seglen, u8 api_flag,
- struct timespec *starttm, u8 * errno_flag)
-{
- spl_netconn_t *conn = sbr_get_conn (sk);
-
- struct spl_pbuf *curr_buf = NULL;
- size_t head_len = SPL_TCP_HLEN + SPL_PBUF_IP_HLEN + SPL_PBUF_LINK_HLEN;
- int noneblockFlg = (api_flag & SPL_NETCONN_DONTBLOCK)
- || ss_is_nonblock_flag (sbr_get_conn (sk));
-
- do
- {
- /* When packages are lost more than TCP_MAXRTX times,
- * conn will be closed and pcb will be removed. */
- if (ss_get_tcp_state (conn) == SPL_CLOSED)
- {
- NSSBR_LOGERR ("pcb SPL_CLOSED]conn=%p", conn);
- sbr_set_sk_io_errno (sk, ECONNABORTED);
- /* Must set errno_flag when set errno, to avoid errnno overwritten by sbr_tcp_write */
- *errno_flag = 1;
- return NULL;
- }
-
- curr_buf = sbr_malloc_tx_pbuf (seglen + head_len, head_len);
- if (NULL == curr_buf)
- {
- if (!sbr_tcp_write_is_wait (sk, starttm, noneblockFlg))
- {
- return NULL;
- }
-
- int err = ss_get_last_errno (sbr_get_conn (sk));
- if (SPL_ERR_IS_FATAL (err))
- {
- NSSBR_LOGERR ("connection fatal error!err=%d", err);
- sbr_set_sk_io_errno (sk, sbr_spl_err_to_errno (err));
- *errno_flag = 1;
- return NULL;
- }
-
- sched_yield ();
- }
- }
- while (curr_buf == NULL);
-
- return curr_buf;
-}
-
-static inline void
-sbr_tcp_write_rel_buf (sbr_socket_t * sk, struct spl_pbuf *buf,
- u32 thread_index)
-{
- if (buf != NULL)
- {
- sbr_handle_free_send_buf (sk, buf);
- }
-}
-
-static inline int
-sbr_tcp_write_fill_buf (const void *data, size_t * pos,
- struct spl_pbuf *seg_buf, size_t seglen,
- size_t optlen)
-{
- size_t start = *pos;
- size_t copy = seglen;
- struct spl_pbuf *first = seg_buf;
-
- while ((0 < copy) && (NULL != first))
- {
- char *dst_ptr = PTR_SHTOL (char *, first->payload_a) + optlen;
-
- if (NULL ==
- common_memcpy (dst_ptr, (u8_t *) data + start, first->len - optlen))
- {
- NSSBR_LOGERR ("common_memcpy error]dst=%p,src=%p,len=%u",
- dst_ptr, (u8_t *) data + start, first->len);
- return -1;
- }
-
- start += (first->len - optlen);
- copy -= (first->len - optlen);
- first = ADDR_SHTOL (first->next_a);
- }
-
- (*pos) = start;
-
- return 0;
-}
-
-static inline int
-sbr_tcp_writev_fill_buf (const struct iovec *iov, size_t * iov_pos,
- int *iov_var, size_t * pos, struct spl_pbuf *seg_buf,
- size_t seglen, size_t optlen)
-{
- size_t valid_copy_len;
- size_t iov_data_left;
-
- size_t copy = seglen;
- size_t start = *pos;
- size_t current_iov_pos = *iov_pos;
- int current_iov_var = *iov_var;
-
- u32 pbuf_offset = optlen;
- u32 pbuf_data_len;
- struct spl_pbuf *first = seg_buf;
-
- while ((0 < copy) && (NULL != first))
- {
- iov_data_left = iov[current_iov_var].iov_len - current_iov_pos;
- if (seglen == copy)
- {
- pbuf_offset = optlen;
- }
-
- pbuf_data_len = first->len - pbuf_offset;
- valid_copy_len =
- (iov_data_left > pbuf_data_len ? pbuf_data_len : iov_data_left);
- if (NULL ==
- common_memcpy ((char *) ADDR_SHTOL (first->payload_a) + pbuf_offset,
- (u8_t *) iov[current_iov_var].iov_base +
- current_iov_pos, valid_copy_len))
- {
- NSSBR_LOGERR
- ("common_memcpy error]current_iov_var=%d, dst=%p,src=%p,len=%zu",
- current_iov_var,
- (char *) ADDR_SHTOL (first->payload_a) + pbuf_offset,
- (u8_t *) iov[current_iov_var].iov_base + current_iov_pos,
- valid_copy_len);
- return -1;
- }
-
- start += valid_copy_len;
- copy -= valid_copy_len;
-
- if (iov_data_left == pbuf_data_len)
- {
- first = PTR_SHTOL (struct spl_pbuf *, first->next_a);
- pbuf_offset = optlen; //+= valid_copy_len;
- current_iov_var++;
- current_iov_pos = 0;
- }
- else if (iov_data_left > pbuf_data_len)
- {
- first = PTR_SHTOL (struct spl_pbuf *, first->next_a);
- pbuf_offset = optlen; //+= valid_copy_len;
- current_iov_pos += valid_copy_len;
- }
- else
- {
- pbuf_offset += valid_copy_len;
-
- current_iov_var++;
- current_iov_pos = 0;
- }
- }
-
- *iov_pos = current_iov_pos;
- *iov_var = current_iov_var;
- *pos = start;
-
- return 0;
-}
-
-static inline void
-sbr_tcp_write_add_buf_to_list (struct spl_pbuf **p_head,
- struct spl_pbuf **p_tail,
- struct spl_pbuf *seg_buf, size_t seglen,
- size_t optlen)
-{
- seg_buf->len = seglen + optlen;
- seg_buf->tot_len = seglen + optlen;
- seg_buf->next_a = 0;
-
- /*put seg_buf after p_head */
- if (NULL == (*p_head))
- {
- (*p_head) = seg_buf;
- (*p_tail) = seg_buf;
- }
- else
- {
- (*p_tail)->next_a = ADDR_LTOSH (seg_buf);
- (*p_tail) = seg_buf;
- }
-}
-
-NSTACK_STATIC int
-sbr_tcp_write (sbr_socket_t * sk, const void *data, size_t size, u8 api_flag,
- size_t * written)
-{
- err_t err = -1;
- size_t pos = 0, left, seglen;
- u32 pbuf_seg_cnt = 0;
- u32 thread_index = 0;
- struct spl_pbuf *seg_buf = NULL;
- struct spl_pbuf *p_head = NULL;
- struct spl_pbuf *p_tail = p_head;
- struct spl_netconn *conn = sbr_get_conn (sk);
- u32 mss = ss_get_mss (sbr_get_conn (sk));
-
- if (0 == size)
- {
- NSSBR_LOGERR ("fd=%d,size=%u", sk->fd, (u32) size);
- return 0;
- }
-
- struct timespec ts;
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &ts)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
-
- while (pos < size)
- {
- left = size - pos;
- seglen = left > mss ? mss : left;
- u8 errno_set = 0;
- seg_buf =
- sbr_tcp_write_alloc_buf (sk, seglen, api_flag, &ts, &errno_set);
- if (NULL == seg_buf)
- {
- NSSBR_LOGINF ("sbr_tcp_write_alloc_buf failed......");
- if (NULL != p_head)
- {
- err = sbr_handle_tcp_send (sk, size, p_head, api_flag);
- if (ERR_OK != err)
- {
- NSSBR_LOGERR ("sbr_handle_tcp_send error]err(%d)", err);
- goto err_ref_buf;
- }
- }
-
- if (0 == pos)
- {
- /* If errno is already set in sbr_tcp_write_alloc_buf, do not overwrite here */
- if (!errno_set)
- {
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- }
- return -1;
- }
-
- NSSBR_LOGDBG ("sent size %zu", pos);
- *written = pos;
-
- return ERR_OK;
- }
-
- if (0 != sbr_tcp_write_fill_buf (data, &pos, seg_buf, seglen, 0))
- {
- sbr_set_sk_io_errno (sk, EFAULT);
- NSSBR_LOGERR ("sbr_tcp_write_fill_buf error]");
- goto err_ref_buf;
- }
-
- sbr_tcp_write_add_buf_to_list (&p_head, &p_tail, seg_buf, seglen, 0);
-
- ++pbuf_seg_cnt;
- if (p_head
- && ((SPL_TCP_SEND_MAX_SEG_PER_MSG <= pbuf_seg_cnt)
- || (pos >= size)))
- {
- pbuf_seg_cnt = 0;
- err = sbr_handle_tcp_send (sk, size, p_head, api_flag);
- if (ERR_OK != err)
- {
- NSSBR_LOGERR ("sbr_handle_tcp_send error]err(%d)", err);
- goto err_ref_buf;
- }
-
- p_head = NULL;
- }
- }
-
- *written = size;
-
- (void) conn;
- return ERR_OK;
-
-err_ref_buf:
- sbr_tcp_write_rel_buf (sk, p_head, thread_index);
- (void) conn;
- return -1;
-}
-
-NSTACK_STATIC int
-sbr_tcp_writev (sbr_socket_t * sk, const struct iovec *iov, int iovcnt)
-{
- err_t err = -1;
- int idx = 0;
- size_t pos = 0, left, seglen, optlen = 0;
- u32 pbuf_seg_cnt = 0;
- u32 thread_index = 0;
- size_t size = 0;
- size_t iov_pos = 0;
- int iov_var = 0;
- struct spl_pbuf *seg_buf = NULL;
- struct spl_pbuf *p_head = NULL;
- struct spl_pbuf *p_tail = p_head;
- struct spl_netconn *conn = sbr_get_conn (sk);
- u32 mss = ss_get_mss (sbr_get_conn (sk));
-
- if (mss <= optlen)
- {
- NSSBR_LOGERR ("mss invalid]mss=%u,optlen=%zu,fd=%d", mss, optlen,
- sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
-
- /* mss dose't include the tcp options length */
- mss -= optlen;
-
- while (idx < iovcnt)
- {
- if (SBR_MAX_INTEGER - iov[idx].iov_len <= size)
- {
- size = SBR_MAX_INTEGER;
- break;
- }
-
- size += iov[idx].iov_len;
- idx++;
- }
-
- struct timespec starttm;
- if (unlikely (0 != clock_gettime (CLOCK_MONOTONIC, &starttm)))
- {
- NSSBR_LOGERR ("Failed to get time, errno = %d", errno);
- }
-
- while (pos < size)
- {
- left = size - pos;
-
- seglen = left > mss ? mss : left;
- u8 errno_set = 0;
- seg_buf =
- sbr_tcp_write_alloc_buf (sk, seglen + optlen, SPL_NETCONN_COPY,
- &starttm, &errno_set);
- if (NULL == seg_buf)
- {
- if (NULL != p_head)
- {
- err = sbr_handle_tcp_send (sk, size, p_head, SPL_NETCONN_COPY);
- /*If errno is already set in sbr_tcp_write_alloc_buf, do not overwrite here */
- if (err != ERR_OK)
- {
- NSSBR_LOGERR ("sbr_handle_tcp_send error]err(%d)", err);
- goto err_ref_buf;
- }
- }
-
- /* [Start]
- 1)Set SO_SNDTIMEO to 10
- 2)Send a msg of larger buff size.and let the timeout happen for send (dont receive at peer side.)
- 3)iRet will be 0 and errno received will be 11 (EAGAIN).
-
- Above issue is fixed.
- */
- if (0 == pos)
- {
- if (!errno_set)
- {
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- }
- return -1;
- }
- /* [End] */
-
- NSSBR_LOGDBG ("sent size %zu", pos);
-
- return pos;
- }
-
- if (0 !=
- sbr_tcp_writev_fill_buf (iov, &iov_pos, &iov_var, &pos, seg_buf,
- seglen, optlen))
- {
- sbr_set_sk_io_errno (sk, EFAULT);
- NSSBR_LOGERR ("sbr_tcp_writev_fill_buf error]");
- goto err_ref_buf;
- }
-
- sbr_tcp_write_add_buf_to_list (&p_head, &p_tail, seg_buf, seglen,
- optlen);
-
- /* @todo: for non-blocking write, check if 'size' would ever fit into
- snd_queue or snd_buf */
- ++pbuf_seg_cnt;
- if (p_head
- && ((SPL_TCP_SEND_MAX_SEG_PER_MSG <= pbuf_seg_cnt)
- || (pos >= size)))
- {
- pbuf_seg_cnt = 0;
- err = sbr_handle_tcp_send (sk, size, p_head, SPL_NETCONN_COPY);
- if (ERR_OK != err)
- {
- NSSBR_LOGERR ("sbr_handle_tcp_send error]err(%d)", err);
- goto err_ref_buf;
- }
-
- p_head = NULL;
- }
- }
- (void) conn;
- return size;
-
-err_ref_buf:
- sbr_tcp_write_rel_buf (sk, p_head, thread_index);
- (void) conn;
- return -1;
-}
-
-NSTACK_STATIC int
-sbr_tcp_sendto (sbr_socket_t * sk, const void *data, size_t size, int flags,
- const struct sockaddr *to, socklen_t tolen)
-{
- return sk->fdopt->send (sk, data, size, flags);
-}
-
-static inline int
-sbr_tcp_send_state_check (sbr_socket_t * sk)
-{
- if ((SPL_SHUT_WR == ss_get_shut_status (sbr_get_conn (sk)))
- || (SPL_SHUT_RDWR == ss_get_shut_status (sbr_get_conn (sk))))
- {
- sbr_set_sk_io_errno (sk, EPIPE);
- return -1;
- }
-
- spl_tcp_state_t state = ss_get_tcp_state (sbr_get_conn (sk));
- if ((SPL_ESTABLISHED != state) && (SPL_CLOSE_WAIT != state))
- {
- /* after all data retrnasmission, connection is active */
- /* patch solution as last_err is not maintained properly */
- if ((SPL_CLOSED == state)
- && (ERR_TIMEOUT == ss_get_last_errno (sbr_get_conn (sk))))
- {
- sbr_set_sk_io_errno (sk, ETIMEDOUT);
- }
- else if ((SPL_CLOSED == state)
- && (ERR_RST == ss_get_last_errno (sbr_get_conn (sk))))
- {
- sbr_set_sk_io_errno (sk, ECONNRESET);
- }
- else
- {
- sbr_set_sk_io_errno (sk, EPIPE);
- }
-
- return -1;
- }
-
- return 0;
-}
-
-NSTACK_STATIC int
-sbr_tcp_send (sbr_socket_t * sk, const void *data, size_t size, int flags)
-{
- int err;
- size_t written = 0;
- u8 write_flags;
-
- if (0 != sbr_tcp_send_state_check (sk))
- {
- NSSBR_LOGDBG ("tcp state not correct]fd=%d, err=%d", sk->fd,
- sbr_get_sk_errno (sk));
- return -1;
- }
-
- write_flags = SPL_NETCONN_COPY |
- ((flags & MSG_MORE) ? SPL_NETCONN_MORE : 0) |
- ((flags & MSG_DONTWAIT) ? SPL_NETCONN_DONTBLOCK : 0);
-
- NSSBR_LOGINF ("Sbr tcp write start");
- err = sbr_tcp_write (sk, data, size, write_flags, &written);
- NSSBR_LOGINF ("Sbr tcp write end written %d", written);
-
- return (err == ERR_OK ? written : -1);
-}
-
-NSTACK_STATIC int
-sbr_tcp_sendmsg (sbr_socket_t * sk, const struct msghdr *pmsg, int flags)
-{
- if (0 != sbr_tcp_send_state_check (sk))
- {
- NSSBR_LOGDBG ("tcp state not correct]fd=%d, err=%d", sk->fd,
- sbr_get_sk_errno (sk));
- return -1;
- }
-
- return sbr_tcp_writev (sk, pmsg->msg_iov, pmsg->msg_iovlen);
-}
-
-NSTACK_STATIC int
-sbr_tcp_fcntl (sbr_socket_t * sk, int cmd, long arg)
-{
- int ret = 0;
-
- switch (cmd)
- {
- case F_GETFL:
- ret = ss_get_nonblock_flag (sbr_get_conn (sk));
- NSSBR_LOGDBG ("F_GETFL]fd=%d,ret=%d", sk->fd, ret);
- break;
-
- case F_SETFL:
- if (arg & O_NONBLOCK)
- {
- NSSBR_LOGDBG ("F_SETFL set O_NONBLOCK val]fd=%d,arg=%ld", sk->fd,
- arg);
- ss_set_nonblock_flag (sbr_get_conn (sk), (arg & O_NONBLOCK));
- }
- else
- {
- NSSBR_LOGDBG ("F_SETFL clean O_NONBLOCK val]fd=%d,arg=%ld", sk->fd,
- arg);
- ss_set_nonblock_flag (sbr_get_conn (sk), 0);
- }
-
- break;
-
- default:
- NSSBR_LOGERR ("cmd is not support]fd=%d,cmd=%d", sk->fd, cmd);
- ret = -1;
- sbr_set_sk_errno (sk, EINVAL);
- break;
- }
-
- return ret;
-}
-
-NSTACK_STATIC int
-sbr_tcp_ioctl (sbr_socket_t * sk, unsigned long cmd, void *arg)
-{
- int ret = 0;
- int recv_avail;
-
- switch (cmd)
- {
- case FIONREAD:
- {
- if (ss_is_listen_state (sbr_get_conn (sk)))
- {
- ret = -1;
- sbr_set_sk_errno (sk, EINVAL);
- break;
- }
-
- recv_avail = ss_get_recv_avail (sbr_get_conn (sk));
- *((u32 *) arg) = recv_avail >= 0 ? recv_avail : 0;
- if (sbr_get_fd_share (sk)->lastdata)
- {
- struct spl_pbuf *buf =
- ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- *((u32 *) arg) +=
- (buf->tot_len - sbr_get_fd_share (sk)->lastoffset);
- }
- }
-
- break;
-
- case FIONBIO:
- {
- u8 val = 0;
-
- if (arg && *(u32 *) arg)
- {
- val = 1;
- }
-
- ss_set_nonblock_flag (sbr_get_conn (sk), val);
- NSSBR_LOGDBG ("FIONBIO]fd=%d,val=%u", sk->fd, val);
- }
-
- break;
-
- default:
- {
- NSSBR_LOGERR ("cmd is not support]fd=%d,cmd=%lu", sk->fd, cmd);
- ret = -1;
- sbr_set_sk_errno (sk, ENOTTY);
- }
- break;
- }
-
- return ret;
-}
-
-NSTACK_STATIC int
-sbr_tcp_close (sbr_socket_t * sk)
-{
- if (sbr_get_fd_share (sk)->lastdata)
- {
- struct spl_netbuf *buf = ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- struct spl_pbuf *p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- sbr_tcp_free_recvbuf (sk, p);
- }
-
- return sbr_handle_close (sk, 0);
-}
-
-sbr_fdopt tcp_fdopt = {
- .socket = sbr_tcp_socket,
- .bind = sbr_tcp_bind,
- .listen = sbr_tcp_listen,
- .accept = sbr_tcp_accept,
- .accept4 = sbr_tcp_accept4,
- .connect = sbr_tcp_connect,
- .shutdown = sbr_tcp_shutdown,
- .getsockname = sbr_tcp_getsockname,
- .getpeername = sbr_tcp_getpeername,
- .getsockopt = sbr_tcp_getsockopt,
- .setsockopt = sbr_tcp_setsockopt,
- .recvfrom = sbr_tcp_recvfrom,
- .readv = sbr_tcp_readv,
- .recvmsg = sbr_tcp_recvmsg,
- .send = sbr_tcp_send,
- .sendto = sbr_tcp_sendto,
- .sendmsg = sbr_tcp_sendmsg,
- .writev = sbr_tcp_writev,
- .fcntl = sbr_tcp_fcntl,
- .ioctl = sbr_tcp_ioctl,
- .close = sbr_tcp_close,
- .peak = sbr_com_peak,
- .lock_common = sbr_com_lock_common,
- .unlock_common = sbr_com_unlock_common,
- .fork_parent = sbr_com_fork_parent,
- .fork_child = sbr_com_fork_child,
- .ep_getevt = stackx_eventpoll_getEvt,
- .ep_ctl = stackx_eventpoll_triggle,
- .set_close_stat = NULL,
-};
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_udp.c b/stacks/lwip_stack/lwip_src/socket/stackx_udp.c
deleted file mode 100644
index 1f382cf..0000000
--- a/stacks/lwip_stack/lwip_src/socket/stackx_udp.c
+++ /dev/null
@@ -1,1153 +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_prot_com.h"
-#include "stackx_msg_handler.h"
-#include "stackx_pbuf.h"
-#include "stackx_epoll_api.h"
-#include "stackx_err.h"
-#include "nstack_securec.h"
-#include "common_pal_bitwide_adjust.h"
-#include "stackx_cfg.h"
-#include <netinet/in.h>
-#ifdef HAL_LIB
-#else
-#include "rte_memcpy.h"
-#endif
-
-#define SPL_PBUF_UDP_LEN (SPL_FRAME_MTU + SPL_PBUF_LINK_HLEN)
-#define L2_L3_ROOM_LEN (SPL_PBUF_LINK_HLEN + SPL_PBUF_IP_HLEN)
-#define L4_ROOM_LEN SPL_PBUF_UDP_HLEN
-
-/*****************************************************************************
-* Prototype : sbr_udp_socket
-* Description : create socket
-* Input : sbr_socket_t * sk
-* int domain
-* int type
-* int protocol
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_socket (sbr_socket_t * sk, int domain, int type, int protocol)
-{
- if (sbr_malloc_conn_for_sk (sk, SPL_NETCONN_UDP) != 0)
- {
- return -1;
- }
-
- int ret = sbr_handle_socket (sk, SPL_NETCONN_UDP, 0);
- if (ret != 0)
- {
- sbr_free_conn_from_sk (sk);
- return ret;
- }
-
- ss_set_nonblock_flag (sbr_get_conn (sk), (type & O_NONBLOCK));
- ss_set_send_event (sbr_get_conn (sk), 1);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_bind
-* Description : udp bind
-* Input : sbr_socket_t * sk
-* const struct sockaddr * name
-* socklen_t namelen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_bind (sbr_socket_t * sk, const struct sockaddr *name,
- socklen_t namelen)
-{
- const struct sockaddr_in *addr_in = (const struct sockaddr_in *) name;
-
- NSSBR_LOGINF ("fd=%d,addr=%s,port=%d,conn=%p,private_data=%p", sk->fd,
- spl_inet_ntoa (addr_in->sin_addr), ntohs (addr_in->sin_port),
- sbr_get_conn (sk), ss_get_private_data (sbr_get_conn (sk)));
- spl_ip_addr_t local_addr;
- inet_addr_to_ipaddr (&local_addr, &addr_in->sin_addr);
- u16 local_port = addr_in->sin_port;
- return sbr_handle_bind (sk, &local_addr, ntohs (local_port));
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_listen
-* Description : unsupport
-* Input : sbr_socket_t * sk
-* int backlog
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_listen (sbr_socket_t * sk, int backlog)
-{
- NSSBR_LOGERR ("type is not TCP]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, EOPNOTSUPP);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_accept
-* Description : unsupport
-* Input : sbr_socket_t * sk
-* sbr_socket_t * new_sk
-* struct sockaddr * addr
-* socklen_t * addrlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_accept (sbr_socket_t * sk, sbr_socket_t * new_sk,
- struct sockaddr *addr, socklen_t * addrlen)
-{
- NSSBR_LOGERR ("type is not TCP]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, EOPNOTSUPP);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_accept4
-* Description : unsupport
-* Input : sbr_socket_t * sk
-* sbr_socket_t * new_sk
-* struct sockaddr * addr
-* socklen_t * addrlen
-* int flags
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_accept4 (sbr_socket_t * sk, sbr_socket_t * new_sk,
- struct sockaddr *addr, socklen_t * addrlen, int flags)
-{
- NSSBR_LOGERR ("type is not TCP]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, EOPNOTSUPP);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_connect
-* Description : udp connect
-* Input : sbr_socket_t * sk
-* const struct sockaddr * name
-* socklen_t namelen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_connect (sbr_socket_t * sk, const struct sockaddr *name,
- socklen_t namelen)
-{
- const struct sockaddr_in *addr_in = (const struct sockaddr_in *) name;
-
- NSSBR_LOGINF ("fd=%d,addr=%s,port=%d,conn=%p,private_data=%p", sk->fd,
- spl_inet_ntoa (addr_in->sin_addr), ntohs (addr_in->sin_port),
- sbr_get_conn (sk), ss_get_private_data (sbr_get_conn (sk)));
- spl_ip_addr_t remote_addr;
-
- inet_addr_to_ipaddr (&remote_addr, &addr_in->sin_addr);
- u16 remote_port = addr_in->sin_port;
-
- spl_ip_addr_t local_addr = { IPADDR_ANY };
-
- return sbr_handle_connect (sk, &remote_addr, ntohs (remote_port),
- &local_addr);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_shutdown
-* Description : udp shutdown
-* Input : sbr_socket_t * sk
-* int how
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_shutdown (sbr_socket_t * sk, int how)
-{
- ss_set_shut_status (sbr_get_conn (sk), how);
- NSSBR_LOGERR ("type is not TCP]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, EOPNOTSUPP);
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_getsockname
-* Description : get sock name
-* Input : sbr_socket_t * sk
-* struct sockaddr * name
-* socklen_t * namelen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_getsockname (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen)
-{
- return sbr_handle_get_name (sk, name, namelen, SBR_GET_SOCK_NAME);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_getpeername
-* Description : get peer name
-* Input : sbr_socket_t * sk
-* struct sockaddr * name
-* socklen_t * namelen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_getpeername (sbr_socket_t * sk, struct sockaddr *name,
- socklen_t * namelen)
-{
- return sbr_handle_get_name (sk, name, namelen, SBR_GET_PEER_NAME);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_getsockopt
-* Description : get sockopt
-* Input : sbr_socket_t * sk
-* int level
-* int optname
-* void * optval
-* socklen_t * optlen
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_udp_getsockopt (sbr_socket_t * sk, int level, int optname, void *optval,
- socklen_t * optlen)
-{
- int err = 0;
-
- switch (level)
- {
- case SOL_SOCKET:
- err = sbr_getsockopt_sol_socket (sk, optname, optval, *optlen);
- break;
- case IPPROTO_IP:
- err = sbr_getsockopt_ipproto_ip (optname, optval, *optlen);
- break;
-
- case NSTACK_SOCKOPT:
- if ((optname == NSTACK_SEM_SLEEP) || (*optlen < sizeof (u32_t)))
- {
- *(u32_t *) optval =
- sbr_get_fd_share (sk)->block_polling_time / 1000;
- NSSOC_LOGINF
- ("udp get recv sleep time success]usleep time=%d,fd=%d",
- sbr_get_fd_share (sk)->block_polling_time, sk->fd);
- return ERR_OK;
- }
- else
- {
- NSSOC_LOGINF ("get recv sleep time failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
-
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- if (err != 0)
- {
- NSSBR_LOGERR ("fail]fd=%d,level=%d,optname=%d,err=%d", sk->fd, level,
- optname, err);
- /* for option not support ,getsockopt() should return fail */
- sbr_set_sk_errno (sk, err);
- return -1;
- }
-
- return sbr_handle_getsockopt (sk, level, optname, optval, optlen);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_setsockopt
-* Description : set sockopt
-* Input : sbr_socket_t * sk
-* int level
-* int optname
-* const void * optval
-* socklen_t optlen
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_setsockopt (sbr_socket_t * sk, int level, int optname,
- const void *optval, socklen_t optlen)
-{
- NSSBR_LOGDBG ("udp setsockopt]fd=%d,level=%d,optname=%d", sk->fd, level,
- optname);
- int err = 0;
- switch (level)
- {
- case SOL_SOCKET:
- err =
- sbr_setsockopt_sol_socket (sk, optname, optval, optlen,
- SPL_NETCONN_UDP);
- break;
- case IPPROTO_IP:
- err =
- sbr_setsockopt_ipproto_ip (optname, optval, optlen, SPL_NETCONN_UDP);
- break;
- case NSTACK_SOCKOPT:
- {
- u32_t sleep_time = *(u32_t *) optval;
- /*sleep time should less than 1s */
- if ((optname == NSTACK_SEM_SLEEP) && (optlen >= sizeof (u32_t))
- && (sleep_time < 1000000))
- {
- sbr_get_fd_share (sk)->block_polling_time = sleep_time * 1000;
- NSSOC_LOGINF
- ("udp set recv sleep time success]usleep time=%d,fd=%d",
- sbr_get_fd_share (sk)->block_polling_time, sk->fd);
- return ERR_OK;
- }
- else
- {
- NSSOC_LOGINF ("set recv sleep time failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
- }
-
- default:
- err = ENOPROTOOPT;
- break;
- }
-
- if (err != 0)
- {
- NSSBR_LOGERR ("fail]fd=%d,level=%d,optname=%d,err=%d", sk->fd, level,
- optname, err);
-
- if (ENOPROTOOPT == err)
- {
- return 0;
- }
- else
- {
- sbr_set_sk_errno (sk, err);
- return -1;
- }
- }
-
- return sbr_handle_setsockopt (sk, level, optname, optval, optlen);
-}
-
-static inline int
-sbr_udp_get_from_addr (sbr_socket_t * sk, struct sockaddr *from,
- socklen_t * fromlen, struct spl_netbuf *buf)
-{
- int ret;
- u16 port = netbuf_fromport (buf);
- spl_ip_addr_t *addr = netbuf_fromaddr (buf);
-
- ret = (from
- && fromlen) ? sbr_get_sockaddr_and_len (port, addr, from,
- fromlen) : 0;
- if (0 != ret)
- {
- sbr_set_sk_io_errno (sk, EINVAL);
- NSSBR_LOGERR ("sbr_udp_get_from_addr]fd=%d", sk->fd);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_recv_from_ring
-* Description : recv buf from ring
-* Input : sbr_socket_t * sk
-* struct spl_netbuf ** buf
-* i32 timeout
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_udp_recv_from_ring (sbr_socket_t * sk, struct spl_netbuf **buf,
- i32 timeout)
-{
- void *p = NULL;
- spl_netconn_t *conn = sbr_get_conn (sk);
-
- if (sbr_dequeue_buf (sk, &p, timeout) != 0)
- {
- return -1;
- }
-
- *buf = (struct spl_netbuf *) ((char *) p + sizeof (struct spl_pbuf));
- ss_sub_recv_event (conn);
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : _sbr_udp_recvfrom
-* Description : base recvfrom,without lock
-* Input : sbr_socket_t * sk
-* void * mem
-* size_t len
-* int flags
-* struct sockaddr * from
-* socklen_t * fromlen
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-_sbr_udp_recvfrom (sbr_socket_t * sk, void *mem, size_t len, int flags,
- struct sockaddr *from, socklen_t * fromlen)
-{
- struct spl_netbuf *buf = NULL;
- struct spl_pbuf *p;
- u32 buflen;
- u32 copylen;
- u32 off = 0;
-
- if (sbr_get_fd_share (sk)->lastdata)
- {
- buf = ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- }
- else
- {
- if ((flags & MSG_DONTWAIT) || ss_is_nonblock_flag (sbr_get_conn (sk)))
- {
- /*
- * return with last err when
- * some fatal err occurs, for example, spl just recovered from a fault.
- */
- int err = ss_get_last_errno (sbr_get_conn (sk));
- if (SPL_ERR_IS_FATAL (err))
- {
- NSSBR_LOGDBG ("connection fatal error]sk->fd=%d,errno=%d",
- sk->fd, err);
- sbr_set_sk_io_errno (sk, sbr_spl_err_to_errno (err));
- return -1;
- }
-
- if (ss_get_recv_event (sbr_get_conn (sk)) <= 0)
- {
- NSSBR_LOGDBG ("no recv event]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EWOULDBLOCK);
- return -1;
- }
- }
-
- if (sbr_udp_recv_from_ring
- (sk, &buf, sbr_get_fd_share (sk)->recv_timeout) != 0)
- {
- return -1;
- }
-
- sbr_get_fd_share (sk)->lastdata = (void *) ADDR_LTOSH (buf);
- }
-
- p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- buflen = p->tot_len;
-
- if (mem)
- {
- copylen = len > buflen ? buflen : len;
-
- if ((copylen > 0) && 0 == spl_pbuf_copy_partial (p, mem, copylen, 0))
- {
- NSSBR_LOGERR ("copy failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EFAULT);
- return -1;
- }
-
- off += copylen;
- }
-
- if (sbr_udp_get_from_addr (sk, from, fromlen, buf) != 0)
- {
- return -1;
- }
-
- if (!(flags & MSG_PEEK))
- {
- sbr_get_fd_share (sk)->lastdata = NULL;
- sbr_com_free_recv_buf (sk, (struct spl_pbuf *) ADDR_SHTOL (buf->p));
- }
-
- return off;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_recvfrom
-* Description : recv from
-* Input : sbr_socket_t * sk
-* void * mem
-* size_t len
-* int flags
-* struct sockaddr * from
-* socklen_t * fromlen
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_recvfrom (sbr_socket_t * sk, void *mem, size_t len, int flags,
- struct sockaddr *from, socklen_t * fromlen)
-{
- sbr_com_lock_recv (sk);
- int ret = _sbr_udp_recvfrom (sk, mem, len, flags, from, fromlen);
- sbr_com_unlock_recv (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_recvdata
-* Description : recv data
-* Input : sbr_socket_t * sk
-* const struct iovec* iov
-* int iovcnt
-* struct spl_netbuf *buf
-* Output : None
-* Return Value : static inline
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_udp_recvdata (sbr_socket_t * sk, const struct iovec *iov, int iovcnt,
- int flags, struct sockaddr *from, socklen_t * fromlen)
-{
- sbr_com_lock_recv (sk);
- if (-1 == _sbr_udp_recvfrom (sk, NULL, 0, MSG_PEEK, from, fromlen))
- {
- sbr_com_unlock_recv (sk);
- return -1;
- }
-
- struct spl_netbuf *buf = ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- struct spl_pbuf *p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- u32 buflen = p->tot_len;
- u32 copylen = 0;
- u32 offset = 0;
-
- int i;
-
- for (i = 0; i < iovcnt; ++i)
- {
- if (!iov[i].iov_base || (0 == iov[i].iov_len))
- {
- continue;
- }
-
- copylen = buflen > iov[i].iov_len ? iov[i].iov_len : buflen;
- if ((copylen > 0)
- && 0 == spl_pbuf_copy_partial (p, iov[i].iov_base, copylen, offset))
- {
- NSSBR_LOGERR ("copy failed]fd=%d", sk->fd);
- goto done;
- }
-
- offset += copylen;
- buflen -= copylen;
-
- if (0 == buflen)
- {
- goto done;
- }
- }
-
-done:
- if (!(flags & MSG_PEEK))
- {
- sbr_get_fd_share (sk)->lastdata = NULL;
- sbr_com_free_recv_buf (sk, (struct spl_pbuf *) ADDR_SHTOL (buf->p));
- }
-
- sbr_com_unlock_recv (sk);
- return offset;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_readv
-* Description : readv
-* Input : sbr_socket_t* sk
-* const struct iovec* iov
-* int iovcnt
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_readv (sbr_socket_t * sk, const struct iovec *iov, int iovcnt)
-{
- return sbr_udp_recvdata (sk, iov, iovcnt, 0, NULL, NULL);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_recvmsg
-* Description : recv msg
-* Input : sbr_socket_t* sk
-* struct msghdr* msg
-* int flags
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_recvmsg (sbr_socket_t * sk, struct msghdr *msg, int flags)
-{
- return sbr_udp_recvdata (sk, msg->msg_iov, msg->msg_iovlen, flags,
- (struct sockaddr *) msg->msg_name,
- &msg->msg_namelen);
-}
-
-/*****************************************************************************
-* Prototype : sbr_copy_iov
-* Description : copy iov
-* Input : sbr_socket_t * sk
-* const struct iovec * iov
-* int iovcnt
-* struct spl_pbuf* buf
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_copy_iov (sbr_socket_t * sk, const struct iovec *iov, int iovcnt,
- struct spl_pbuf *buf)
-{
- u32 buf_left = buf->len;
- i8 *buf_data = (i8 *) ADDR_SHTOL (buf->payload);
- u32 iov_left;
- i8 *iov_data;
- u32 copy_len;
-
- int i;
-
- for (i = 0; i < iovcnt; ++i)
- {
- if (!iov[i].iov_base || (0 == iov[i].iov_len))
- {
- continue;
- }
-
- iov_left = (u32) iov[i].iov_len; /* to u32 is ok,len is checked in sbr_udp_senddata */
- iov_data = (i8 *) iov[i].iov_base;
- while (iov_left)
- {
- copy_len = buf_left > iov_left ? iov_left : buf_left;
-
- if (NULL == common_memcpy (buf_data, iov_data, copy_len))
- {
- NSSBR_LOGERR ("common_memcpy error]fd=%d", sk->fd);
- sbr_set_sk_errno (sk, EFAULT);
- return -1;
- }
-
- buf_data += copy_len;
- buf_left -= copy_len;
- iov_data += copy_len;
- iov_left -= copy_len;
- if (0 == buf_left)
- {
- buf = (struct spl_pbuf *) ADDR_SHTOL (buf->next);
- if (buf)
- {
- buf_left = buf->len;
- buf_data = (i8 *) ADDR_SHTOL (buf->payload);
- }
- else
- {
- return 0;
- }
- }
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_senddata
-* Description : send data
-* Input : sbr_socket_t * sk
-* const struct iovec * iov
-* int iovcnt
-* int flags
-* const struct sockaddr * to
-* socklen_t tolen
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_udp_senddata (sbr_socket_t * sk, const struct iovec *iov, int iovcnt,
- int flags, const struct sockaddr *to, socklen_t tolen)
-{
- size_t size = 0;
- int iov_idx;
-
- for (iov_idx = 0; iov_idx < iovcnt; ++iov_idx)
- {
- if ((SPL_MAX_UDP_MSG_LEN - size) < iov[iov_idx].iov_len)
- {
- NSSBR_LOGERR
- ("size > SPL_MAX_UDP_MSG_LEN]fd=%d,SPL_MAX_UDP_MSG_LEN=%u",
- sk->fd, SPL_MAX_UDP_MSG_LEN);
- sbr_set_sk_io_errno (sk, EMSGSIZE);
- return -1;
- }
-
- size += iov[iov_idx].iov_len;
- }
-
- if (to == NULL)
- {
- /* if not bind , then dest address should not be NULL */
- if (IPADDR_ANY == ss_get_remote_ip (sbr_get_conn (sk))->addr)
- {
- NSSBR_LOGERR ("dest address is null]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, EDESTADDRREQ);
- return -1;
- }
- }
- else if (to->sa_family != AF_INET)
- {
- NSSBR_LOGERR ("invalid address family]fd=%d,family=%d", sk->fd,
- to->sa_family);
- sbr_set_sk_io_errno (sk, EAFNOSUPPORT);
- return -1;
- }
- else if (tolen != sizeof (struct sockaddr_in))
- {
- NSSBR_LOGERR ("invalid address len]fd=%d,tolen=%u", sk->fd, tolen);
- sbr_set_sk_io_errno (sk, EINVAL);
- return -1;
- }
-
- struct spl_netbuf buf;
- const struct sockaddr_in *to_in = (const struct sockaddr_in *) to;
- buf.p = NULL;
- if (to_in)
- {
- NSSBR_LOGDBG ("fd=%d,addr=%s,port=%d,conn=%p,private_data=%p", sk->fd,
- spl_inet_ntoa (to_in->sin_addr), ntohs (to_in->sin_port),
- sbr_get_conn (sk),
- ss_get_private_data (sbr_get_conn (sk)));
- inet_addr_to_ipaddr (&buf.addr, &to_in->sin_addr);
- netbuf_fromport (&buf) = ntohs (to_in->sin_port);
- }
- else
- {
- spl_ip_addr_set_any (&buf.addr);
- netbuf_fromport (&buf) = 0;
- }
-
- spl_ip_addr_t local_ip = { IPADDR_ANY };
-
- int err = ss_get_last_errno (sbr_get_conn (sk));
- if (SPL_ERR_IS_FATAL (err))
- {
- NS_LOG_CTRL (LOG_CTRL_SEND, LOGSBR, "NSSBR", NSLOG_ERR,
- "connection fatal error!err=%d", err);
- sbr_set_sk_errno (sk, sbr_spl_err_to_errno (err));
- return -1;
- }
-
- u16 remain_len = size; //+ head_room_len;
- struct spl_pbuf *p = NULL;
- PRIMARY_ADDR struct spl_pbuf *header = NULL;
- struct spl_pbuf **tail = &header;
- u16 head_len = L2_L3_ROOM_LEN + L4_ROOM_LEN;
- u16 copy_len;
- u16 alloc_len;
-
- do
- {
- copy_len =
- remain_len >
- (SPL_PBUF_UDP_LEN - head_len) ? (SPL_PBUF_UDP_LEN -
- head_len) : remain_len;
- alloc_len = head_len + copy_len;
- p = sbr_malloc_tx_pbuf (alloc_len, head_len);
- if (unlikely (!p))
- {
- NSSBR_LOGDBG ("malloc pbuf failed]fd=%d", sk->fd);
- sbr_set_sk_io_errno (sk, ENOMEM);
- sbr_handle_free_send_buf (sk,
- (struct spl_pbuf *) ADDR_SHTOL (header));
- // ss_set_send_event(sbr_get_conn(sk), 0);
- return -1;
- }
-
- struct spl_pbuf *tmp = (struct spl_pbuf *) ADDR_SHTOL (header);
- while (tmp)
- {
- tmp->tot_len += p->len;
- tmp = (struct spl_pbuf *) ADDR_SHTOL (tmp->next);
- }
-
- *tail = (struct spl_pbuf *) ADDR_LTOSH (p); /* header will changed to share */
- tail = &p->next;
-
- remain_len -= copy_len;
- head_len = L2_L3_ROOM_LEN;
- }
- while (remain_len);
-
- /*udp support len=0 */
- if (size != 0)
- {
- if (sbr_copy_iov
- (sk, iov, iovcnt, (struct spl_pbuf *) ADDR_SHTOL (header)) != 0)
- {
- sbr_handle_free_send_buf (sk,
- (struct spl_pbuf *) ADDR_SHTOL (header));
- return -1;
- }
- }
-
- buf.p = header;
- err = sbr_handle_udp_send (sk, &buf, &local_ip);
- if (0 == err)
- {
- epoll_triggle_event_from_api (sk, EPOLL_API_OP_SEND);
- //ss_set_send_event(sbr_get_conn(sk), 1);
- return size;
- }
- else
- {
- sbr_handle_free_send_buf (sk, (struct spl_pbuf *) ADDR_SHTOL (buf.p));
- return -1;
- }
-
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_sendto
-* Description : sendto
-* Input : sbr_socket_t * sk
-* const void * data
-* size_t size
-* int flags
-* const struct sockaddr * to
-* socklen_t tolen
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_sendto (sbr_socket_t * sk, const void *data, size_t size, int flags,
- const struct sockaddr *to, socklen_t tolen)
-{
- struct iovec iov;
-
- iov.iov_base = (void *) data;
- iov.iov_len = size;
- return sbr_udp_senddata (sk, &iov, 1, flags, to, tolen);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_send
-* Description : send
-* Input : sbr_socket_t * sk
-* const void * data
-* size_t size
-* int flags
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_send (sbr_socket_t * sk, const void *data, size_t size, int flags)
-{
- return sk->fdopt->sendto (sk, data, size, flags, NULL, 0);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_sendmsg
-* Description : send msg
-* Input : sbr_socket_t * sk
-* const struct msghdr * pmsg
-* int flags
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_sendmsg (sbr_socket_t * sk, const struct msghdr *pmsg, int flags)
-{
- return sbr_udp_senddata (sk, pmsg->msg_iov, pmsg->msg_iovlen, flags,
- (struct sockaddr *) pmsg->msg_name,
- pmsg->msg_namelen);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_writev
-* Description : writev
-* Input : sbr_socket_t * sk
-* const struct iovec * iov
-* int iovcnt
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_writev (sbr_socket_t * sk, const struct iovec *iov, int iovcnt)
-{
- return sbr_udp_senddata (sk, iov, iovcnt, 0, NULL, 0);
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_fcntl
-* Description : fcntl
-* Input : sbr_socket_t * sk
-* int cmd
-* long arg
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_fcntl (sbr_socket_t * sk, int cmd, long arg)
-{
- int ret = 0;
-
- switch (cmd)
- {
- case F_GETFL:
- ret = ss_get_nonblock_flag (sbr_get_conn (sk));
- NSSBR_LOGDBG ("F_GETFL]fd=%d,ret=%d", sk->fd, ret);
- break;
- case F_SETFL:
- if (arg & O_NONBLOCK)
- {
- NSSBR_LOGDBG ("F_SETFL set O_NONBLOCK val]fd=%d,arg=%ld", sk->fd,
- arg);
- ss_set_nonblock_flag (sbr_get_conn (sk), (arg & O_NONBLOCK));
- }
- else
- {
- NSSBR_LOGDBG ("F_SETFL clean O_NONBLOCK val]fd=%d,arg=%ld", sk->fd,
- arg);
- ss_set_nonblock_flag (sbr_get_conn (sk), 0);
- }
-
- break;
- default:
- NSSBR_LOGERR ("cmd is not support]fd=%d,cmd=%d", sk->fd, cmd);
- ret = -1;
- sbr_set_sk_errno (sk, EINVAL);
-
- break;
- }
-
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_ioctl
-* Description : ioctl
-* Input : sbr_socket_t * sk
-* unsigned long cmd
-* void * arg
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_ioctl (sbr_socket_t * sk, unsigned long cmd, void *arg)
-{
- int ret = 0;
-
- switch (cmd)
- {
- case FIONREAD:
- {
- if (!sbr_com_try_lock_recv (sk))
- {
- return 0;
- }
-
- struct spl_pbuf *p = NULL;
- struct spl_netbuf *buf = NULL;
- if (!sbr_get_fd_share (sk)->lastdata)
- {
- ret = sbr_udp_recv_from_ring (sk, &buf, -1);
- if (ret != 0)
- {
- sbr_com_unlock_recv (sk);
- return EWOULDBLOCK == errno ? 0 : -1;
- }
-
- sbr_get_fd_share (sk)->lastdata = (void *) ADDR_LTOSH (buf);
- p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- }
- else
- {
- buf =
- (struct spl_netbuf *)
- ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- }
-
- *((u32 *) arg) = p->tot_len;
- sbr_com_unlock_recv (sk);
- }
- break;
- case FIONBIO:
- {
- u8 val = 0;
-
- if (arg && *(u32 *) arg)
- {
- val = 1;
- }
-
- ss_set_nonblock_flag (sbr_get_conn (sk), val);
- NSSBR_LOGDBG ("FIONBIO]fd=%d,val=%u", sk->fd, val);
- }
- break;
- default:
- {
- NSSBR_LOGERR ("cmd is not support]fd=%d,cmd=%lu", sk->fd, cmd);
- ret = -1;
- sbr_set_sk_errno (sk, ENOTTY);
- }
-
- break;
- }
-
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : sbr_udp_close
-* Description : close
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static int
-sbr_udp_close (sbr_socket_t * sk)
-{
- if (sbr_get_fd_share (sk)->lastdata)
- {
- struct spl_netbuf *buf = ADDR_SHTOL (sbr_get_fd_share (sk)->lastdata);
- struct spl_pbuf *p = (struct spl_pbuf *) ADDR_SHTOL (buf->p);
- sbr_com_free_recv_buf (sk, p);
- }
-
- /* if failed,free it in recycle */
- return sbr_handle_close (sk, 0);
-}
-
-sbr_fdopt udp_fdopt = {
- .socket = sbr_udp_socket,
- .bind = sbr_udp_bind,
- .listen = sbr_udp_listen,
- .accept = sbr_udp_accept,
- .accept4 = sbr_udp_accept4,
- .connect = sbr_udp_connect,
- .shutdown = sbr_udp_shutdown,
- .getsockname = sbr_udp_getsockname,
- .getpeername = sbr_udp_getpeername,
- .getsockopt = sbr_udp_getsockopt,
- .setsockopt = sbr_udp_setsockopt,
- .recvfrom = sbr_udp_recvfrom,
- .readv = sbr_udp_readv,
- .recvmsg = sbr_udp_recvmsg,
- .send = sbr_udp_send,
- .sendto = sbr_udp_sendto,
- .sendmsg = sbr_udp_sendmsg,
- .writev = sbr_udp_writev,
- .fcntl = sbr_udp_fcntl,
- .ioctl = sbr_udp_ioctl,
- .close = sbr_udp_close,
- .peak = sbr_com_peak,
- .lock_common = sbr_com_lock_common,
- .unlock_common = sbr_com_unlock_common,
- .fork_parent = sbr_com_fork_parent,
- .fork_child = sbr_com_fork_child,
- .ep_getevt = stackx_eventpoll_getEvt,
- .ep_ctl = stackx_eventpoll_triggle,
- .set_close_stat = NULL,
-};
diff --git a/stacks/lwip_stack/patch/.gitkeep b/stacks/lwip_stack/patch/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/stacks/lwip_stack/patch/.gitkeep
+++ /dev/null
diff --git a/stacks/lwip_stack/release/configure/ip_data.json b/stacks/lwip_stack/release/configure/ip_data.json
deleted file mode 100644
index 1d52b77..0000000
--- a/stacks/lwip_stack/release/configure/ip_data.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "ports_list": [
- {
- "port_name": "PortA",
- "ip_cidr": ["192.168.1.207/24"]
- }
- ]
-}
diff --git a/stacks/lwip_stack/release/configure/nStackConfig.json b/stacks/lwip_stack/release/configure/nStackConfig.json
deleted file mode 100644
index 3cc54c5..0000000
--- a/stacks/lwip_stack/release/configure/nStackConfig.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-"cfg_seg_socket": [
-{
- "socket_num": 8192,
- "arp_stale_time": 300,
- "arp_bc_retrans_num": 5
-}
-],
-"cfg_seg_log": [
-{
- "run_log_size": 50,
- "run_log_count": 10,
- "mon_log_size": 10,
- "mon_log_count": 10
-}
-],
-"cfg_seg_thread_pri": [
-{
- "comment":"0:SCHED_OTHER, 1:SCHED_FIFO, 2:SCHED_RR",
- "sched_policy": 0,
- "thread_pri": 0
-}
-],
-"cfg_seg_path": [
-{
- "stackpool_log_path": "/var/log/nStack",
- "master_log_path": "/var/log/nStack",
- "nstack_log_path": "/var/log/nStack",
- "dpdk_log_path": "/var/log/nstack-dpdk"
-}
-]
-}
diff --git a/stacks/lwip_stack/release/configure/network_data_tonStack.json b/stacks/lwip_stack/release/configure/network_data_tonStack.json
deleted file mode 100644
index 7b734b0..0000000
--- a/stacks/lwip_stack/release/configure/network_data_tonStack.json
+++ /dev/null
@@ -1,16 +0,0 @@
-[
- {
- "name": "network1",
- "type": "nstack-dpdk",
- "ipam": {
- "subnet": "192.168.1.1/24"
- },
- "args": {
- "phynet": {
- "ref_nic": [
- "eth7"
- ]
- }
- }
- },
-]
diff --git a/stacks/lwip_stack/release/include/nstack_custom_api.h b/stacks/lwip_stack/release/include/nstack_custom_api.h
deleted file mode 100644
index e6cae1e..0000000
--- a/stacks/lwip_stack/release/include/nstack_custom_api.h
+++ /dev/null
@@ -1,42 +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.
-*/
-
-#ifndef __NSTACK_CUSTOM_API_H__
-#define __NSTACK_CUSTOM_API_H__
-
-/*****************************************************************************
-* Prototype : create a custom socket ,when using this type .
-*****************************************************************************/
-#ifndef SOCK_NS_CUSTOM
-#define SOCK_NS_CUSTOM 0xf001
-#endif
-
-/*****************************************************************************
-* Prototype : setsockopt level type
-*****************************************************************************/
-enum
-{
- NSTACK_SOCKOPT = 0xff02
-};
-
-/*****************************************************************************
-* Prototype : setsockopt optname type
-*****************************************************************************/
-enum
-{
- NSTACK_SEM_SLEEP = 0X0001
-};
-#endif
diff --git a/stacks/lwip_stack/release/lib64/.gitkeep b/stacks/lwip_stack/release/lib64/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/stacks/lwip_stack/release/lib64/.gitkeep
+++ /dev/null
diff --git a/stacks/lwip_stack/release/lwip_helper_files/arch/queue.c b/stacks/lwip_stack/release/lwip_helper_files/arch/queue.c
deleted file mode 100644
index 4916dae..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/arch/queue.c
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <pthread.h>
-#include "lwip/memp.h"
-#include "lwip/mem.h"
-
-#include "arch/queue.h"
-#include "lwip/sys.h"
-#include "nstack_log.h"
-#include "lwip/sockets.h"
-#include "stackx_spl_share.h"
-#include "lwip/api.h"
-#include "lwip/ip.h"
-#include <netif/sc_dpdk.h>
-
-err_t
-queue_push (queue_t * q, void *pmsg, int isTrypush)
-{
- int pushRet;
- // struct tcpip_msg* _msg = pmsg;
-
- //enum tcpip_msg_type tcpip_type = TCPIP_MSG_MAX;
- //struct new_api_msg* lo_newapimsg = NULL;
- // enum api_msg_type api_type = NEW_MSG_API_MAX;
- // struct netconn *lo_conn = NULL;
- //u64_t tcp_tx_bytes = 0;
- while (1)
- {
- pushRet = nsfw_mem_ring_enqueue (q->llring, pmsg);
-
- switch (pushRet)
- {
-
- case -1:
- NSSOC_LOGERR ("Box range check has failed]llring_a=%p, msg=%p",
- q->llring, pmsg);
- return ERR_MEM;
-
- case 1:
- return ERR_OK;
-
- default:
- if (isTrypush)
- {
- return ERR_MEM;
- }
- else
- {
- continue;
- }
- }
- }
-}
-
-void *
-queue_pop (queue_t * q, u32_t * timeout, int isTryPop)
-{
- void *pmsg;
- int popRet;
- int retVal;
- u32_t ellapsetime = 0;
-// struct tcpip_msg* _msg;
- struct timespec starttm = { 0 };
- struct timespec endtm;
- u32_t timeDiff;
- if (*timeout != 0)
- {
- retVal = clock_gettime (CLOCK_MONOTONIC, &starttm);
- if (0 != retVal)
- {
- NSPOL_LOGERR ("clock_gettime() failed]");
- *timeout = SYS_ARCH_TIMEOUT;
- return NULL;
- }
- }
-
- while (1)
- {
- //TODO:May have to consider, take out the data sharing problem
- popRet = nsfw_mem_ring_dequeue (q->llring, &pmsg);
-
- switch (popRet)
- {
- case 1:
- *timeout = ellapsetime;
- return pmsg;
-
- default:
-
- if (isTryPop)
- {
- *timeout = SYS_ARCH_TIMEOUT;
- return NULL;
- }
- else
- {
- if (*timeout != 0)
- {
- retVal = clock_gettime (CLOCK_MONOTONIC, &endtm);
- if (0 != retVal)
- {
- NSPOL_LOGERR ("clock_gettime() failed]");
- *timeout = SYS_ARCH_TIMEOUT;
- return NULL;
- }
-
- timeDiff = endtm.tv_sec - starttm.tv_sec;
- if (timeDiff > *timeout)
- {
- *timeout = SYS_ARCH_TIMEOUT;
- return NULL;
- }
- sys_sleep_ns (0, 100000);
- }
-
- continue;
- }
-
- }
- }
-
-}
diff --git a/stacks/lwip_stack/release/lwip_helper_files/arch/sys_arch.c b/stacks/lwip_stack/release/lwip_helper_files/arch/sys_arch.c
deleted file mode 100644
index bdda4d2..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/arch/sys_arch.c
+++ /dev/null
@@ -1,237 +0,0 @@
-#include <sys/queue.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <stdint.h>
-
-#include <pthread.h>
-#include <sys/time.h>
-#include <time.h>
-#include <linux/sched.h>
-
-#include <asm/unistd.h>
-#include <linux/unistd.h>
-#include <syscall.h>
-
-#include <lwip/sys.h>
-#include <cc.h>
-#include <arch/sys_arch.h>
-#include <arch/queue.h>
-#include "nstack_log.h"
-#include "lwip/sockets.h"
-#include "spl_timers.h"
-#include "nstack_securec.h"
-#include "nstack_share_res.h"
-#include "nstack_log.h"
-
-#include "stackx_spl_share.h"
-#include "lwip/api.h"
-#include "lwip/ip.h"
-#include <netif/sc_dpdk.h>
-#include <netif/sharedmemory.h>
-
-#include "common_mem_common.h"
-#include "common_func.h"
-#include "common_mem_api.h"
-
-#include "mgr_com.h"
-#ifdef HAL_LIB
-#else
-#include "rte_ring.h"
-#endif
-
-#include "timeouts.h"
-
-sys_sem_st g_global_semaphore;
-
-/** Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid */
-int
-sys_mbox_valid (sys_mbox_t * mbox)
-{
- return ((*mbox == SYS_MBOX_NULL) ? 0 : 1);
-}
-
-struct lwip_thread
-{
- void (*func) (void *arg);
- void *arg;
-};
-
-static void *
-lwip_thread_entry (void *arg)
-{
- struct lwip_thread *lt = arg;
-
- lt->func (lt->arg);
-
- free (lt);
- return 0;
-}
-
-/** The only thread function:
- * Creates a new thread
- * @param name human-readable name for the thread (used for debugging purposes)
- * @param thread thread-function
- * @param arg parameter passed to 'thread'
- * @param stacksize stack size in bytes for the new thread (may be ignored by ports)
- * @param prio priority of the new thread (may be ignored by ports) */
-sys_thread_t
-sys_thread_new2 (const char *name, lwip_thread_fn thread, void *arg,
- int stacksize, int prio, int policy)
-{
- pthread_attr_t attr;
- set_thread_attr (&attr, stacksize, prio, policy);
-
- struct lwip_thread *lt = malloc (sizeof (*lt));
- if (lt == NULL)
- {
- NSPOL_LOGERR ("process abort:cannot allocate thread struct");
- abort ();
- }
-
- lt->func = thread;
- lt->arg = arg;
-
- pthread_t t;
- int r = pthread_create (&t, &attr, lwip_thread_entry, lt);
-
- if (r != 0)
- {
- NSPOL_LOGERR ("process abort:lwip:annot create]errno_string=%s",
- strerror (r));
- abort ();
- }
- else
- {
- NSPOL_LOGINF (SC_DPDK_INFO, "]thread_name=%s.", name);
- }
-
- (void) pthread_setname_np (t, name);
-
- return t;
-}
-
-/** The only thread function:
- * Creates a new thread
- * @param name human-readable name for the thread (used for debugging purposes)
- * @param thread thread-function
- * @param arg parameter passed to 'thread'
- * @param stacksize stack size in bytes for the new thread (may be ignored by ports)
- * @param prio priority of the new thread (may be ignored by ports) */
-sys_thread_t
-sys_thread_new (const char *name, lwip_thread_fn thread, void *arg,
- int stacksize, int prio)
-{
- pthread_attr_t attr;
- set_thread_attr (&attr, stacksize, prio, 0);
-
- struct lwip_thread *lt = malloc (sizeof (*lt));
- if (lt == NULL)
- {
- NSPOL_LOGERR ("process abort:cannot allocate thread struct");
- abort ();
- }
-
- lt->func = thread;
- lt->arg = arg;
-
- pthread_t t;
- int r = pthread_create (&t, &attr, lwip_thread_entry, lt);
-
- if (r != 0)
- {
- NSPOL_LOGERR ("process abort:lwip:annot create]errno_string=%s",
- strerror (r));
- abort ();
- }
- else
- {
- NSPOL_LOGINF (SC_DPDK_INFO, "]thread_name=%s.", name);
- }
-
- (void) pthread_setname_np (t, name);
-
- return t;
-}
-
-void
-stackx_global_lock (void)
-{
- sys_arch_lock_with_pid (&g_global_semaphore);
-}
-
-void
-stackx_global_unlock (void)
-{
- sys_sem_s_signal (&g_global_semaphore);
-}
-
-void
-sys_init (void)
-{
- return;
-}
-
-void
-sys_timeouts_mbox_fetch (sys_mbox_t * mbox, void **msg)
-{
- return;
-}
-
-void
-sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg)
-{
- struct ptimer_node *tmo = arg;
-
- tmo = malloc (sizeof (struct ptimer_node)); /*lint !e586 */
- if (NULL == tmo)
- {
- NSPOL_LOGERR ("malloc ptimer node failed!");
- return;
- }
-
- int ret = MEMSET_S (tmo, sizeof (struct ptimer_node), 0,
- sizeof (struct ptimer_node));
- if (EOK != ret)
- {
- NSPOL_LOGERR ("MEMSET_S failed]ret=%d", ret);
- free (tmo);
- return;
- }
-
- NSPOL_LOGDBG (TIMERS_DEBUG, "alloc]ptimer_node=%p", tmo);
-
- tmo->info.msec = msecs;
- tmo->info._phandle = handler;
- tmo->info.ctx = arg;
- tmo->info.flags = PTIMER_ONESHOT;
- tmo->index = 0;
- regedit_ptimer (SYS_PTIMEROUT_MSG, handler, tmo);
-}
-
-void
-sys_untimeout (sys_timeout_handler handler, void *arg)
-{
- regedit_ptimer (SYS_UNPTIMEROUT_MSG, handler, arg);
- return;
-}
-
-/**
- * Timer callback function that calls mld6_tmr() and reschedules itself.
- *
- * @param arg unused argument
- */
-void
-cyclic_timer (void *arg)
-{
- const struct lwip_cyclic_timer *cyclic =
- (const struct lwip_cyclic_timer *) arg;
-#if LWIP_DEBUG_TIMERNAMES
- LWIP_DEBUGF (TIMERS_DEBUG, ("tcpip: %s()\n", cyclic->handler_name));
-#endif
- cyclic->handler ();
- sys_timeout (cyclic->interval_ms, cyclic_timer, arg);
-}
diff --git a/stacks/lwip_stack/release/lwip_helper_files/core/timeouts.c b/stacks/lwip_stack/release/lwip_helper_files/core/timeouts.c
deleted file mode 100644
index efbda94..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/core/timeouts.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/**
- * @file
- * Stack-internal timers implementation.
- * This file includes timer callbacks for stack-internal timers as well as
- * functions to set up or stop timers and check for expired timers.
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- * Simon Goldschmidt
- *
- */
-
-#include "lwip/opt.h"
-
-#include "lwip/timeouts.h"
-#include "lwip/priv/tcp_priv.h"
-
-#include "lwip/def.h"
-#include "lwip/memp.h"
-#include "lwip/priv/tcpip_priv.h"
-
-#include "lwip/ip4_frag.h"
-#include "lwip/etharp.h"
-#include "lwip/dhcp.h"
-#include "lwip/autoip.h"
-#include "lwip/igmp.h"
-#include "lwip/dns.h"
-#include "lwip/nd6.h"
-#include "lwip/ip6_frag.h"
-#include "lwip/mld6.h"
-#include "lwip/sys.h"
-#include "lwip/pbuf.h"
-
-#if LWIP_DEBUG_TIMERNAMES
-#define HANDLER(x) x, #x
-#else /* LWIP_DEBUG_TIMERNAMES */
-#define HANDLER(x) x
-#endif /* LWIP_DEBUG_TIMERNAMES */
-
-/** This array contains all stack-internal cyclic timers. To get the number of
- * timers, use LWIP_ARRAYSIZE() */
-const struct lwip_cyclic_timer lwip_cyclic_timers[] = {
-#if LWIP_TCP
- /* The TCP timer is a special case: it does not have to run always and
- is triggered to start from TCP using tcp_timer_needed() */
- {TCP_TMR_INTERVAL, HANDLER (tcp_tmr)},
-#endif /* LWIP_TCP */
-#if LWIP_IPV4
-#if IP_REASSEMBLY
- {IP_TMR_INTERVAL, HANDLER (ip_reass_tmr)},
-#endif /* IP_REASSEMBLY */
-#if LWIP_ARP
- {ARP_TMR_INTERVAL, HANDLER (etharp_tmr)},
-#endif /* LWIP_ARP */
-#if LWIP_DHCP
- {DHCP_COARSE_TIMER_MSECS, HANDLER (dhcp_coarse_tmr)},
- {DHCP_FINE_TIMER_MSECS, HANDLER (dhcp_fine_tmr)},
-#endif /* LWIP_DHCP */
-#if LWIP_AUTOIP
- {AUTOIP_TMR_INTERVAL, HANDLER (autoip_tmr)},
-#endif /* LWIP_AUTOIP */
-#if LWIP_IGMP
- {IGMP_TMR_INTERVAL, HANDLER (igmp_tmr)},
-#endif /* LWIP_IGMP */
-#endif /* LWIP_IPV4 */
-#if LWIP_DNS
- {DNS_TMR_INTERVAL, HANDLER (dns_tmr)},
-#endif /* LWIP_DNS */
-#if LWIP_IPV6
- {ND6_TMR_INTERVAL, HANDLER (nd6_tmr)},
-#if LWIP_IPV6_REASS
- {IP6_REASS_TMR_INTERVAL, HANDLER (ip6_reass_tmr)},
-#endif /* LWIP_IPV6_REASS */
-#if LWIP_IPV6_MLD
- {MLD6_TMR_INTERVAL, HANDLER (mld6_tmr)},
-#endif /* LWIP_IPV6_MLD */
-#endif /* LWIP_IPV6 */
-};
-
-#if LWIP_TIMERS && !LWIP_TIMERS_CUSTOM
-
-/** The one and only timeout list */
-static struct sys_timeo *next_timeout;
-static u32_t timeouts_last_time;
-
-#if LWIP_TCP
-/** global variable that shows if the tcp timer is currently scheduled or not */
-static int tcpip_tcp_timer_active;
-
-/**
- * Timer callback function that calls tcp_tmr() and reschedules itself.
- *
- * @param arg unused argument
- */
-static void
-tcpip_tcp_timer (void *arg)
-{
- LWIP_UNUSED_ARG (arg);
-
- /* call TCP timer handler */
- tcp_tmr ();
- /* timer still needed? */
- if (tcp_active_pcbs || tcp_tw_pcbs)
- {
- /* restart timer */
- sys_timeout (TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- }
- else
- {
- /* disable timer */
- tcpip_tcp_timer_active = 0;
- }
-}
-
-/**
- * Called from TCP_REG when registering a new PCB:
- * the reason is to have the TCP timer only running when
- * there are active (or time-wait) PCBs.
- */
-void
-tcp_timer_needed (void)
-{
- /* timer is off but needed again? */
- if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs))
- {
- /* enable and start timer */
- tcpip_tcp_timer_active = 1;
- sys_timeout (TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- }
-}
-#endif /* LWIP_TCP */
-
-/**
- * Timer callback function that calls mld6_tmr() and reschedules itself.
- *
- * @param arg unused argument
- */
-static void
-cyclic_timer (void *arg)
-{
- const struct lwip_cyclic_timer *cyclic =
- (const struct lwip_cyclic_timer *) arg;
-#if LWIP_DEBUG_TIMERNAMES
- LWIP_DEBUGF (TIMERS_DEBUG, ("tcpip: %s()\n", cyclic->handler_name));
-#endif
- cyclic->handler ();
- sys_timeout (cyclic->interval_ms, cyclic_timer, arg);
-}
-
-/** Initialize this module */
-void
-sys_timeouts_init (void)
-{
- size_t i;
- /* tcp_tmr() at index 0 is started on demand */
- for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE (lwip_cyclic_timers); i++)
- {
- /* we have to cast via size_t to get rid of const warning
- (this is OK as cyclic_timer() casts back to const* */
- sys_timeout (lwip_cyclic_timers[i].interval_ms, cyclic_timer,
- LWIP_CONST_CAST (void *, &lwip_cyclic_timers[i]));
- }
-
- /* Initialise timestamp for sys_check_timeouts */
- timeouts_last_time = sys_now ();
-}
-
-/**
- * Create a one-shot timer (aka timeout). Timeouts are processed in the
- * following cases:
- * - while waiting for a message using sys_timeouts_mbox_fetch()
- * - by calling sys_check_timeouts() (NO_SYS==1 only)
- *
- * @param msecs time in milliseconds after that the timer should expire
- * @param handler callback function to call when msecs have elapsed
- * @param arg argument to pass to the callback function
- */
-#if LWIP_DEBUG_TIMERNAMES
-void
-sys_timeout_debug (u32_t msecs, sys_timeout_handler handler, void *arg,
- const char *handler_name)
-#else /* LWIP_DEBUG_TIMERNAMES */
-void
-sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg)
-#endif /* LWIP_DEBUG_TIMERNAMES */
-{
- struct sys_timeo *timeout, *t;
- u32_t now, diff;
-
- timeout = (struct sys_timeo *) memp_malloc (MEMP_SYS_TIMEOUT);
- if (timeout == NULL)
- {
- LWIP_ASSERT
- ("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty",
- timeout != NULL);
- return;
- }
-
- now = sys_now ();
- if (next_timeout == NULL)
- {
- diff = 0;
- timeouts_last_time = now;
- }
- else
- {
- diff = now - timeouts_last_time;
- }
-
- timeout->next = NULL;
- timeout->h = handler;
- timeout->arg = arg;
- timeout->time = msecs + diff;
-#if LWIP_DEBUG_TIMERNAMES
- timeout->handler_name = handler_name;
- LWIP_DEBUGF (TIMERS_DEBUG,
- ("sys_timeout: %p msecs=%" U32_F " handler=%s arg=%p\n",
- (void *) timeout, msecs, handler_name, (void *) arg));
-#endif /* LWIP_DEBUG_TIMERNAMES */
-
- if (next_timeout == NULL)
- {
- next_timeout = timeout;
- return;
- }
-
- if (next_timeout->time > msecs)
- {
- next_timeout->time -= msecs;
- timeout->next = next_timeout;
- next_timeout = timeout;
- }
- else
- {
- for (t = next_timeout; t != NULL; t = t->next)
- {
- timeout->time -= t->time;
- if (t->next == NULL || t->next->time > timeout->time)
- {
- if (t->next != NULL)
- {
- t->next->time -= timeout->time;
- }
- else if (timeout->time > msecs)
- {
- /* If this is the case, 'timeouts_last_time' and 'now' differs too much.
- This can be due to sys_check_timeouts() not being called at the right
- times, but also when stopping in a breakpoint. Anyway, let's assume
- this is not wanted, so add the first timer's time instead of 'diff' */
- timeout->time = msecs + next_timeout->time;
- }
- timeout->next = t->next;
- t->next = timeout;
- break;
- }
- }
- }
-}
-
-/**
- * Go through timeout list (for this task only) and remove the first matching
- * entry (subsequent entries remain untouched), even though the timeout has not
- * triggered yet.
- *
- * @param handler callback function that would be called by the timeout
- * @param arg callback argument that would be passed to handler
-*/
-void
-sys_untimeout (sys_timeout_handler handler, void *arg)
-{
- struct sys_timeo *prev_t, *t;
-
- if (next_timeout == NULL)
- {
- return;
- }
-
- for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next)
- {
- if ((t->h == handler) && (t->arg == arg))
- {
- /* We have a match */
- /* Unlink from previous in list */
- if (prev_t == NULL)
- {
- next_timeout = t->next;
- }
- else
- {
- prev_t->next = t->next;
- }
- /* If not the last one, add time of this one back to next */
- if (t->next != NULL)
- {
- t->next->time += t->time;
- }
- memp_free (MEMP_SYS_TIMEOUT, t);
- return;
- }
- }
- return;
-}
-
-/**
- * @ingroup lwip_nosys
- * Handle timeouts for NO_SYS==1 (i.e. without using
- * tcpip_thread/sys_timeouts_mbox_fetch(). Uses sys_now() to call timeout
- * handler functions when timeouts expire.
- *
- * Must be called periodically from your main loop.
- */
-#if !NO_SYS && !defined __DOXYGEN__
-static
-#endif /* !NO_SYS */
- void
-sys_check_timeouts (void)
-{
- if (next_timeout)
- {
- struct sys_timeo *tmptimeout;
- u32_t diff;
- sys_timeout_handler handler;
- void *arg;
- u8_t had_one;
- u32_t now;
-
- now = sys_now ();
- /* this cares for wraparounds */
- diff = now - timeouts_last_time;
- do
- {
- PBUF_CHECK_FREE_OOSEQ ();
- had_one = 0;
- tmptimeout = next_timeout;
- if (tmptimeout && (tmptimeout->time <= diff))
- {
- /* timeout has expired */
- had_one = 1;
- timeouts_last_time += tmptimeout->time;
- diff -= tmptimeout->time;
- next_timeout = tmptimeout->next;
- handler = tmptimeout->h;
- arg = tmptimeout->arg;
-#if LWIP_DEBUG_TIMERNAMES
- if (handler != NULL)
- {
- LWIP_DEBUGF (TIMERS_DEBUG, ("sct calling h=%s arg=%p\n",
- tmptimeout->handler_name, arg));
- }
-#endif /* LWIP_DEBUG_TIMERNAMES */
- memp_free (MEMP_SYS_TIMEOUT, tmptimeout);
- if (handler != NULL)
- {
-#if !NO_SYS
- /* For LWIP_TCPIP_CORE_LOCKING, lock the core before calling the
- timeout handler function. */
- LOCK_TCPIP_CORE ();
-#endif /* !NO_SYS */
- handler (arg);
-#if !NO_SYS
- UNLOCK_TCPIP_CORE ();
-#endif /* !NO_SYS */
- }
- LWIP_TCPIP_THREAD_ALIVE ();
- }
- /* repeat until all expired timers have been called */
- }
- while (had_one);
- }
-}
-
-/** Set back the timestamp of the last call to sys_check_timeouts()
- * This is necessary if sys_check_timeouts() hasn't been called for a long
- * time (e.g. while saving energy) to prevent all timer functions of that
- * period being called.
- */
-void
-sys_restart_timeouts (void)
-{
- timeouts_last_time = sys_now ();
-}
-
-/** Return the time left before the next timeout is due. If no timeouts are
- * enqueued, returns 0xffffffff
- */
-#if !NO_SYS
-static
-#endif /* !NO_SYS */
- u32_t
-sys_timeouts_sleeptime (void)
-{
- u32_t diff;
- if (next_timeout == NULL)
- {
- return 0xffffffff;
- }
- diff = sys_now () - timeouts_last_time;
- if (diff > next_timeout->time)
- {
- return 0;
- }
- else
- {
- return next_timeout->time - diff;
- }
-}
-
-#if !NO_SYS
-
-/**
- * Wait (forever) for a message to arrive in an mbox.
- * While waiting, timeouts are processed.
- *
- * @param mbox the mbox to fetch the message from
- * @param msg the place to store the message
- */
-void
-sys_timeouts_mbox_fetch (sys_mbox_t * mbox, void **msg)
-{
- u32_t sleeptime;
-
-again:
- if (!next_timeout)
- {
- sys_arch_mbox_fetch (mbox, msg, 0);
- return;
- }
-
- sleeptime = sys_timeouts_sleeptime ();
- if (sleeptime == 0
- || sys_arch_mbox_fetch (mbox, msg, sleeptime) == SYS_ARCH_TIMEOUT)
- {
- /* If a SYS_ARCH_TIMEOUT value is returned, a timeout occurred
- before a message could be fetched. */
- sys_check_timeouts ();
- /* We try again to fetch a message from the mbox. */
- goto again;
- }
-}
-
-#endif /* NO_SYS */
-
-#else /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */
-/* Satisfy the TCP code which calls this function */
-static int tcpip_tcp_timer_active;
-
-void
-tcp_timer_needed (void)
-{
- /* timer is off but needed again? */
- if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs))
- {
- /* enable and start timer */
- tcpip_tcp_timer_active = 1;
- sys_timeout (TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- }
-}
-
-/**
- * Timer callback function that calls tcp_tmr() and reschedules itself.
- *
- * @param arg unused argument
- */
-void
-tcpip_tcp_timer (void *arg)
-{
- LWIP_UNUSED_ARG (arg);
-
- /* call TCP timer handler */
- tcp_tmr ();
- /* timer still needed? */
- if (tcp_active_pcbs || tcp_tw_pcbs)
- {
- /* restart timer */
- sys_timeout (TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- }
- else
- {
- /* disable timer */
- tcpip_tcp_timer_active = 0;
- }
-}
-
-void
-sys_timeouts_init (void)
-{
- size_t i;
- /* tcp_tmr() at index 0 is started on demand */
- for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE (lwip_cyclic_timers); i++)
- {
- /* we have to cast via size_t to get rid of const warning
- (this is OK as cyclic_timer() casts back to const* */
- sys_timeout (lwip_cyclic_timers[i].interval_ms, cyclic_timer,
- LWIP_CONST_CAST (void *, &lwip_cyclic_timers[i]));
- }
-}
-
-#endif /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */
diff --git a/stacks/lwip_stack/release/lwip_helper_files/download_lwip.sh b/stacks/lwip_stack/release/lwip_helper_files/download_lwip.sh
deleted file mode 100755
index bbb8afb..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/download_lwip.sh
+++ /dev/null
@@ -1,35 +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.
-#########################################################################
-#!/bin/bash -x
-
-set -x
-
-SCRIPT_DIR=$(dirname "$0")
-echo $SCRIPT_DIR
-LWIP_DOWNLOAD_DIR="${SCRIPT_DIR}/../../lwip_src/"
-echo $LWIP_DOWNLOAD_DIR
-if [ ! -d "${LWIP_DOWNLOAD_DIR}/lwip/" ]; then
- mkdir -p ${LWIP_DOWNLOAD_DIR}/lwip/
- cd ${LWIP_DOWNLOAD_DIR}/
- wget -N --no-check-certificate http://download-mirror.savannah.nongnu.org/releases/lwip/lwip-2.0.3.zip
- unzip ${LWIP_DOWNLOAD_DIR}/lwip-2.0.3.zip "lwip-2.0.3/src/*" -d ${LWIP_DOWNLOAD_DIR}/lwip
- mv ${LWIP_DOWNLOAD_DIR}/lwip/lwip-2.0.3/src/* ${LWIP_DOWNLOAD_DIR}/lwip/
- rm -rf ${LWIP_DOWNLOAD_DIR}/lwip/lwip-2.0.3/
- cp -r ${SCRIPT_DIR}/arch/ ${LWIP_DOWNLOAD_DIR}/lwip/
- cp -r ${SCRIPT_DIR}/lwip/arch/ ${LWIP_DOWNLOAD_DIR}/lwip/include/lwip/
- cp -r ${SCRIPT_DIR}/core/* ${LWIP_DOWNLOAD_DIR}/lwip/core/
- cp -r ${SCRIPT_DIR}/include/* ${LWIP_DOWNLOAD_DIR}/lwip/include/lwip/
- mv ${LWIP_DOWNLOAD_DIR}/lwip/include/lwip/errno.h ${LWIP_DOWNLOAD_DIR}/lwip/include/lwip/lwip_errno.h
-fi
diff --git a/stacks/lwip_stack/release/lwip_helper_files/include/lwipopts.h b/stacks/lwip_stack/release/lwip_helper_files/include/lwipopts.h
deleted file mode 100644
index 46c4af2..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/include/lwipopts.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef LWIP_LWIPOPTS_H
-#define LWIP_LWIPOPTS_H
-
-#define RING_CACHE_SIZE 1024
-#define LISTEN_CACHE_SIZE 1024
-#define RECV_MAX_POOL 4
-#define MAX_TRY_GET_MEMORY_TIMES 4
-#define MAX_MEMORY_USED_SIZE 80
-
-#define IP_HLEN 20
-#define TCP_HLEN 20
-#define TCP_MAX_OPTION_LEN 40
-
-#define _cache_aligned __attribute__((__aligned__(64)))
-#define LWIP_NETIF_API 1
-
-#define TCP_OVERSIZE 1
-#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS
-#define SYS_LIGHTWEIGHT_PROT 1
-#define LWIP_DISABLE_TCP_SANITY_CHECKS 1
-#define LWIP_COMPAT_MUTEX_ALLOWED 1
-#define LWIP_ERRNO_INCLUDE <errno.h>
-#define LWIP_SKIP_PACKING_CHECK 1
-#define PBUF_POOL_FREE_OOSEQ 0
-
-#define LWIP_DEBUG 1
-#define LWIP_TIMERS 0
-#define LWIP_TIMERS_CUSTOM 1
-#define LWIP_TCPIP_CORE_LOCKING 1
-#define MEM_LIBC_MALLOC 1
-#define MEMP_MEM_MALLOC 1
-#define LWIP_CALLBACK_API 1
-#define LWIP_SOCKET 0
-#define LWIP_POSIX_SOCKETS_IO_NAMES 0
-#define LWIP_TCP_KEEPALIVE 1
-#define LWIP_TIMEVAL_PRIVATE 0
-#define LWIP_COMPAT_MUTEX 1
-#ifdef TCP_MSS
-#undef TCP_MSS
-#endif
-#define TCP_MSS 1460
-#define TCP_WND (20 * TCP_MSS)
-#define TCP_SND_BUF (10 * TCP_MSS)
-#define TCP_SND_QUEUELEN ((20 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))
-#define LWIP_WND_SCALE 1
-#define TCP_RCV_SCALE 7
-#endif
diff --git a/stacks/lwip_stack/release/lwip_helper_files/include/opt.h b/stacks/lwip_stack/release/lwip_helper_files/include/opt.h
deleted file mode 100644
index 040e9cf..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/include/opt.h
+++ /dev/null
@@ -1,2875 +0,0 @@
-/**
- * @file
- *
- * lwIP Options Configuration
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-
-/*
- * NOTE: || defined __DOXYGEN__ is a workaround for doxygen bug -
- * without this, doxygen does not see the actual #define
- */
-
-#if !defined LWIP_HDR_OPT_H
-#define LWIP_HDR_OPT_H
-
-/*
- * Include user defined options first. Anything not defined in these files
- * will be set to standard values. Override anything you don't like!
- */
-#include "lwipopts.h"
-#include "lwip/debug.h"
-
-/**
- * @defgroup lwip_opts Options (lwipopts.h)
- * @ingroup lwip
- *
- * @defgroup lwip_opts_debug Debugging
- * @ingroup lwip_opts
- *
- * @defgroup lwip_opts_infrastructure Infrastructure
- * @ingroup lwip_opts
- *
- * @defgroup lwip_opts_callback Callback-style APIs
- * @ingroup lwip_opts
- *
- * @defgroup lwip_opts_threadsafe_apis Thread-safe APIs
- * @ingroup lwip_opts
- */
-
- /*
- ------------------------------------
- -------------- NO SYS --------------
- ------------------------------------
- */
-/**
- * @defgroup lwip_opts_nosys NO_SYS
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * NO_SYS==1: Use lwIP without OS-awareness (no thread, semaphores, mutexes or
- * mboxes). This means threaded APIs cannot be used (socket, netconn,
- * i.e. everything in the 'api' folder), only the callback-style raw API is
- * available (and you have to watch out for yourself that you don't access
- * lwIP functions/structures from more than one context at a time!)
- */
-#if !defined NO_SYS || defined __DOXYGEN__
-#define NO_SYS 0
-#endif
-/**
- * @}
- */
-
-/**
- * @defgroup lwip_opts_timers Timers
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * LWIP_TIMERS==0: Drop support for sys_timeout and lwip-internal cyclic timers.
- * (the array of lwip-internal cyclic timers is still provided)
- * (check NO_SYS_NO_TIMERS for compatibility to old versions)
- */
-#if !defined LWIP_TIMERS || defined __DOXYGEN__
-#ifdef NO_SYS_NO_TIMERS
-#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS))
-#else
-#define LWIP_TIMERS 1
-#endif
-#endif
-
-/**
- * LWIP_TIMERS_CUSTOM==1: Provide your own timer implementation.
- * Function prototypes in timeouts.h and the array of lwip-internal cyclic timers
- * are still included, but the implementation is not. The following functions
- * will be required: sys_timeouts_init(), sys_timeout(), sys_untimeout(),
- * sys_timeouts_mbox_fetch()
- */
-#if !defined LWIP_TIMERS_CUSTOM || defined __DOXYGEN__
-#define LWIP_TIMERS_CUSTOM 0
-#endif
-/**
- * @}
- */
-
-/**
- * @defgroup lwip_opts_memcpy memcpy
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * MEMCPY: override this if you have a faster implementation at hand than the
- * one included in your C library
- */
-#if !defined MEMCPY || defined __DOXYGEN__
-#define MEMCPY(dst,src,len) memcpy(dst,src,len)
-#endif
-
-/**
- * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a
- * call to memcpy() if the length is known at compile time and is small.
- */
-#if !defined SMEMCPY || defined __DOXYGEN__
-#define SMEMCPY(dst,src,len) memcpy(dst,src,len)
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ----------- Core locking -----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_lock Core locking and MPU
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * LWIP_MPU_COMPATIBLE: enables special memory management mechanism
- * which makes lwip able to work on MPU (Memory Protection Unit) system
- * by not passing stack-pointers to other threads
- * (this decreases performance as memory is allocated from pools instead
- * of keeping it on the stack)
- */
-#if !defined LWIP_MPU_COMPATIBLE || defined __DOXYGEN__
-#define LWIP_MPU_COMPATIBLE 0
-#endif
-
-/**
- * LWIP_TCPIP_CORE_LOCKING
- * Creates a global mutex that is held during TCPIP thread operations.
- * Can be locked by client code to perform lwIP operations without changing
- * into TCPIP thread using callbacks. See LOCK_TCPIP_CORE() and
- * UNLOCK_TCPIP_CORE().
- * Your system should provide mutexes supporting priority inversion to use this.
- */
-#if !defined LWIP_TCPIP_CORE_LOCKING || defined __DOXYGEN__
-#define LWIP_TCPIP_CORE_LOCKING 1
-#endif
-
-/**
- * LWIP_TCPIP_CORE_LOCKING_INPUT: when LWIP_TCPIP_CORE_LOCKING is enabled,
- * this lets tcpip_input() grab the mutex for input packets as well,
- * instead of allocating a message and passing it to tcpip_thread.
- *
- * ATTENTION: this does not work when tcpip_input() is called from
- * interrupt context!
- */
-#if !defined LWIP_TCPIP_CORE_LOCKING_INPUT || defined __DOXYGEN__
-#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
-#endif
-
-/**
- * SYS_LIGHTWEIGHT_PROT==1: enable inter-task protection (and task-vs-interrupt
- * protection) for certain critical regions during buffer allocation, deallocation
- * and memory allocation and deallocation.
- * ATTENTION: This is required when using lwIP from more than one context! If
- * you disable this, you must be sure what you are doing!
- */
-#if !defined SYS_LIGHTWEIGHT_PROT || defined __DOXYGEN__
-#define SYS_LIGHTWEIGHT_PROT 1
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ---------- Memory options ----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_mem Heap and memory pools
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library
- * instead of the lwip internal allocator. Can save code size if you
- * already use it.
- */
-#if !defined MEM_LIBC_MALLOC || defined __DOXYGEN__
-#define MEM_LIBC_MALLOC 0
-#endif
-
-/**
- * MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator.
- * Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution
- * speed (heap alloc can be much slower than pool alloc) and usage from interrupts
- * (especially if your netif driver allocates PBUF_POOL pbufs for received frames
- * from interrupt)!
- * ATTENTION: Currently, this uses the heap for ALL pools (also for private pools,
- * not only for internal pools defined in memp_std.h)!
- */
-#if !defined MEMP_MEM_MALLOC || defined __DOXYGEN__
-#define MEMP_MEM_MALLOC 0
-#endif
-
-/**
- * MEM_ALIGNMENT: should be set to the alignment of the CPU
- * 4 byte alignment -> \#define MEM_ALIGNMENT 4
- * 2 byte alignment -> \#define MEM_ALIGNMENT 2
- */
-#if !defined MEM_ALIGNMENT || defined __DOXYGEN__
-#define MEM_ALIGNMENT 1
-#endif
-
-/**
- * MEM_SIZE: the size of the heap memory. If the application will send
- * a lot of data that needs to be copied, this should be set high.
- */
-#if !defined MEM_SIZE || defined __DOXYGEN__
-#define MEM_SIZE 1600
-#endif
-
-/**
- * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable
- * amount of bytes before and after each memp element in every pool and fills
- * it with a prominent default value.
- * MEMP_OVERFLOW_CHECK == 0 no checking
- * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed
- * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time
- * memp_malloc() or memp_free() is called (useful but slow!)
- */
-#if !defined MEMP_OVERFLOW_CHECK || defined __DOXYGEN__
-#define MEMP_OVERFLOW_CHECK 0
-#endif
-
-/**
- * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make
- * sure that there are no cycles in the linked lists.
- */
-#if !defined MEMP_SANITY_CHECK || defined __DOXYGEN__
-#define MEMP_SANITY_CHECK 0
-#endif
-
-/**
- * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set
- * of memory pools of various sizes. When mem_malloc is called, an element of
- * the smallest pool that can provide the length needed is returned.
- * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled.
- */
-#if !defined MEM_USE_POOLS || defined __DOXYGEN__
-#define MEM_USE_POOLS 0
-#endif
-
-/**
- * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next
- * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more
- * reliable. */
-#if !defined MEM_USE_POOLS_TRY_BIGGER_POOL || defined __DOXYGEN__
-#define MEM_USE_POOLS_TRY_BIGGER_POOL 0
-#endif
-
-/**
- * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h
- * that defines additional pools beyond the "standard" ones required
- * by lwIP. If you set this to 1, you must have lwippools.h in your
- * include path somewhere.
- */
-#if !defined MEMP_USE_CUSTOM_POOLS || defined __DOXYGEN__
-#define MEMP_USE_CUSTOM_POOLS 0
-#endif
-
-/**
- * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from
- * interrupt context (or another context that doesn't allow waiting for a
- * semaphore).
- * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT,
- * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs
- * with each loop so that mem_free can run.
- *
- * ATTENTION: As you can see from the above description, this leads to dis-/
- * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc
- * can need longer.
- *
- * If you don't want that, at least for NO_SYS=0, you can still use the following
- * functions to enqueue a deallocation call which then runs in the tcpip_thread
- * context:
- * - pbuf_free_callback(p);
- * - mem_free_callback(m);
- */
-#if !defined LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT || defined __DOXYGEN__
-#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------------------
- ---------- Internal Memory Pool Sizes ----------
- ------------------------------------------------
-*/
-/**
- * @defgroup lwip_opts_memp Internal memory pools
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF).
- * If the application sends a lot of data out of ROM (or other static memory),
- * this should be set high.
- */
-#if !defined MEMP_NUM_PBUF || defined __DOXYGEN__
-#define MEMP_NUM_PBUF 16
-#endif
-
-/**
- * MEMP_NUM_RAW_PCB: Number of raw connection PCBs
- * (requires the LWIP_RAW option)
- */
-#if !defined MEMP_NUM_RAW_PCB || defined __DOXYGEN__
-#define MEMP_NUM_RAW_PCB 4
-#endif
-
-/**
- * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
- * per active UDP "connection".
- * (requires the LWIP_UDP option)
- */
-#if !defined MEMP_NUM_UDP_PCB || defined __DOXYGEN__
-#define MEMP_NUM_UDP_PCB 4
-#endif
-
-/**
- * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections.
- * (requires the LWIP_TCP option)
- */
-#if !defined MEMP_NUM_TCP_PCB || defined __DOXYGEN__
-#define MEMP_NUM_TCP_PCB 5
-#endif
-
-/**
- * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.
- * (requires the LWIP_TCP option)
- */
-#if !defined MEMP_NUM_TCP_PCB_LISTEN || defined __DOXYGEN__
-#define MEMP_NUM_TCP_PCB_LISTEN 8
-#endif
-
-/**
- * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
- * (requires the LWIP_TCP option)
- */
-#if !defined MEMP_NUM_TCP_SEG || defined __DOXYGEN__
-#define MEMP_NUM_TCP_SEG 16
-#endif
-
-/**
- * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
- * reassembly (whole packets, not fragments!)
- */
-#if !defined MEMP_NUM_REASSDATA || defined __DOXYGEN__
-#define MEMP_NUM_REASSDATA 5
-#endif
-
-/**
- * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent
- * (fragments, not whole packets!).
- * This is only used with LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1
- * with DMA-enabled MACs where the packet is not yet sent when netif->output
- * returns.
- */
-#if !defined MEMP_NUM_FRAG_PBUF || defined __DOXYGEN__
-#define MEMP_NUM_FRAG_PBUF 15
-#endif
-
-/**
- * MEMP_NUM_ARP_QUEUE: the number of simultaneously queued outgoing
- * packets (pbufs) that are waiting for an ARP request (to resolve
- * their destination address) to finish.
- * (requires the ARP_QUEUEING option)
- */
-#if !defined MEMP_NUM_ARP_QUEUE || defined __DOXYGEN__
-#define MEMP_NUM_ARP_QUEUE 30
-#endif
-
-/**
- * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces
- * can be members at the same time (one per netif - allsystems group -, plus one
- * per netif membership).
- * (requires the LWIP_IGMP option)
- */
-#if !defined MEMP_NUM_IGMP_GROUP || defined __DOXYGEN__
-#define MEMP_NUM_IGMP_GROUP 8
-#endif
-
-/**
- * MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
- * The default number of timeouts is calculated here for all enabled modules.
- * The formula expects settings to be either '0' or '1'.
- */
-#if !defined MEMP_NUM_SYS_TIMEOUT || defined __DOXYGEN__
-#define MEMP_NUM_SYS_TIMEOUT (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + (PPP_SUPPORT*6*MEMP_NUM_PPP_PCB) + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0))
-#endif
-
-/**
- * MEMP_NUM_NETBUF: the number of struct netbufs.
- * (only needed if you use the sequential API, like api_lib.c)
- */
-#if !defined MEMP_NUM_NETBUF || defined __DOXYGEN__
-#define MEMP_NUM_NETBUF 2
-#endif
-
-/**
- * MEMP_NUM_NETCONN: the number of struct netconns.
- * (only needed if you use the sequential API, like api_lib.c)
- */
-#if !defined MEMP_NUM_NETCONN || defined __DOXYGEN__
-#define MEMP_NUM_NETCONN 4
-#endif
-
-/**
- * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used
- * for callback/timeout API communication.
- * (only needed if you use tcpip.c)
- */
-#if !defined MEMP_NUM_TCPIP_MSG_API || defined __DOXYGEN__
-#define MEMP_NUM_TCPIP_MSG_API 8
-#endif
-
-/**
- * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used
- * for incoming packets.
- * (only needed if you use tcpip.c)
- */
-#if !defined MEMP_NUM_TCPIP_MSG_INPKT || defined __DOXYGEN__
-#define MEMP_NUM_TCPIP_MSG_INPKT 8
-#endif
-
-/**
- * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls
- * (before freeing the corresponding memory using lwip_freeaddrinfo()).
- */
-#if !defined MEMP_NUM_NETDB || defined __DOXYGEN__
-#define MEMP_NUM_NETDB 1
-#endif
-
-/**
- * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list
- * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1.
- */
-#if !defined MEMP_NUM_LOCALHOSTLIST || defined __DOXYGEN__
-#define MEMP_NUM_LOCALHOSTLIST 1
-#endif
-
-/**
- * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
- */
-#if !defined PBUF_POOL_SIZE || defined __DOXYGEN__
-#define PBUF_POOL_SIZE 16
-#endif
-
-/** MEMP_NUM_API_MSG: the number of concurrently active calls to various
- * socket, netconn, and tcpip functions
- */
-#if !defined MEMP_NUM_API_MSG || defined __DOXYGEN__
-#define MEMP_NUM_API_MSG MEMP_NUM_TCPIP_MSG_API
-#endif
-
-/** MEMP_NUM_DNS_API_MSG: the number of concurrently active calls to netconn_gethostbyname
- */
-#if !defined MEMP_NUM_DNS_API_MSG || defined __DOXYGEN__
-#define MEMP_NUM_DNS_API_MSG MEMP_NUM_TCPIP_MSG_API
-#endif
-
-/** MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA: the number of concurrently active calls
- * to getsockopt/setsockopt
- */
-#if !defined MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA || defined __DOXYGEN__
-#define MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA MEMP_NUM_TCPIP_MSG_API
-#endif
-
-/** MEMP_NUM_NETIFAPI_MSG: the number of concurrently active calls to the
- * netifapi functions
- */
-#if !defined MEMP_NUM_NETIFAPI_MSG || defined __DOXYGEN__
-#define MEMP_NUM_NETIFAPI_MSG MEMP_NUM_TCPIP_MSG_API
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------
- ---------- ARP options ----------
- ---------------------------------
-*/
-/**
- * @defgroup lwip_opts_arp ARP
- * @ingroup lwip_opts_ipv4
- * @{
- */
-/**
- * LWIP_ARP==1: Enable ARP functionality.
- */
-#if !defined LWIP_ARP || defined __DOXYGEN__
-#define LWIP_ARP 1
-#endif
-
-/**
- * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached.
- */
-#if !defined ARP_TABLE_SIZE || defined __DOXYGEN__
-#define ARP_TABLE_SIZE 10
-#endif
-
-/** the time an ARP entry stays valid after its last update,
- * for ARP_TMR_INTERVAL = 1000, this is
- * (60 * 5) seconds = 5 minutes.
- */
-#if !defined ARP_MAXAGE || defined __DOXYGEN__
-#define ARP_MAXAGE 300
-#endif
-
-/**
- * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address
- * resolution. By default, only the most recent packet is queued per IP address.
- * This is sufficient for most protocols and mainly reduces TCP connection
- * startup time. Set this to 1 if you know your application sends more than one
- * packet in a row to an IP address that is not in the ARP cache.
- */
-#if !defined ARP_QUEUEING || defined __DOXYGEN__
-#define ARP_QUEUEING 0
-#endif
-
-/** The maximum number of packets which may be queued for each
- * unresolved address by other network layers. Defaults to 3, 0 means disabled.
- * Old packets are dropped, new packets are queued.
- */
-#if !defined ARP_QUEUE_LEN || defined __DOXYGEN__
-#define ARP_QUEUE_LEN 3
-#endif
-
-/**
- * ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with
- * VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and
- * LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers.
- * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.
- * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.
- * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.
- * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan)
- * that returns 1 to accept a packet or 0 to drop a packet.
- */
-#if !defined ETHARP_SUPPORT_VLAN || defined __DOXYGEN__
-#define ETHARP_SUPPORT_VLAN 0
-#endif
-
-/** LWIP_ETHERNET==1: enable ethernet support even though ARP might be disabled
- */
-#if !defined LWIP_ETHERNET || defined __DOXYGEN__
-#define LWIP_ETHERNET LWIP_ARP
-#endif
-
-/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure
- * alignment of payload after that header. Since the header is 14 bytes long,
- * without this padding e.g. addresses in the IP header will not be aligned
- * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms.
- */
-#if !defined ETH_PAD_SIZE || defined __DOXYGEN__
-#define ETH_PAD_SIZE 0
-#endif
-
-/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table
- * entries (using etharp_add_static_entry/etharp_remove_static_entry).
- */
-#if !defined ETHARP_SUPPORT_STATIC_ENTRIES || defined __DOXYGEN__
-#define ETHARP_SUPPORT_STATIC_ENTRIES 0
-#endif
-
-/** ETHARP_TABLE_MATCH_NETIF==1: Match netif for ARP table entries.
- * If disabled, duplicate IP address on multiple netifs are not supported
- * (but this should only occur for AutoIP).
- */
-#if !defined ETHARP_TABLE_MATCH_NETIF || defined __DOXYGEN__
-#define ETHARP_TABLE_MATCH_NETIF 0
-#endif
-/**
- * @}
- */
-
-/*
- --------------------------------
- ---------- IP options ----------
- --------------------------------
-*/
-/**
- * @defgroup lwip_opts_ipv4 IPv4
- * @ingroup lwip_opts
- * @{
- */
-/**
- * LWIP_IPV4==1: Enable IPv4
- */
-#if !defined LWIP_IPV4 || defined __DOXYGEN__
-#define LWIP_IPV4 1
-#endif
-
-/**
- * IP_FORWARD==1: Enables the ability to forward IP packets across network
- * interfaces. If you are going to run lwIP on a device with only one network
- * interface, define this to 0.
- */
-#if !defined IP_FORWARD || defined __DOXYGEN__
-#define IP_FORWARD 0
-#endif
-
-/**
- * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that
- * this option does not affect outgoing packet sizes, which can be controlled
- * via IP_FRAG.
- */
-#if !defined IP_REASSEMBLY || defined __DOXYGEN__
-#define IP_REASSEMBLY 1
-#endif
-
-/**
- * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note
- * that this option does not affect incoming packet sizes, which can be
- * controlled via IP_REASSEMBLY.
- */
-#if !defined IP_FRAG || defined __DOXYGEN__
-#define IP_FRAG 1
-#endif
-
-#if !LWIP_IPV4
-/* disable IPv4 extensions when IPv4 is disabled */
-#undef IP_FORWARD
-#define IP_FORWARD 0
-#undef IP_REASSEMBLY
-#define IP_REASSEMBLY 0
-#undef IP_FRAG
-#define IP_FRAG 0
-#endif /* !LWIP_IPV4 */
-
-/**
- * IP_OPTIONS_ALLOWED: Defines the behavior for IP options.
- * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped.
- * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed).
- */
-#if !defined IP_OPTIONS_ALLOWED || defined __DOXYGEN__
-#define IP_OPTIONS_ALLOWED 1
-#endif
-
-/**
- * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally)
- * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived
- * in this time, the whole packet is discarded.
- */
-#if !defined IP_REASS_MAXAGE || defined __DOXYGEN__
-#define IP_REASS_MAXAGE 3
-#endif
-
-/**
- * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
- * Since the received pbufs are enqueued, be sure to configure
- * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
- * packets even if the maximum amount of fragments is enqueued for reassembly!
- */
-#if !defined IP_REASS_MAX_PBUFS || defined __DOXYGEN__
-#define IP_REASS_MAX_PBUFS 10
-#endif
-
-/**
- * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.
- */
-#if !defined IP_DEFAULT_TTL || defined __DOXYGEN__
-#define IP_DEFAULT_TTL 255
-#endif
-
-/**
- * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast
- * filter per pcb on udp and raw send operations. To enable broadcast filter
- * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1.
- */
-#if !defined IP_SOF_BROADCAST || defined __DOXYGEN__
-#define IP_SOF_BROADCAST 0
-#endif
-
-/**
- * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast
- * filter on recv operations.
- */
-#if !defined IP_SOF_BROADCAST_RECV || defined __DOXYGEN__
-#define IP_SOF_BROADCAST_RECV 0
-#endif
-
-/**
- * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back
- * out on the netif where it was received. This should only be used for
- * wireless networks.
- * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming
- * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags!
- */
-#if !defined IP_FORWARD_ALLOW_TX_ON_RX_NETIF || defined __DOXYGEN__
-#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0
-#endif
-
-/**
- * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: randomize the local port for the first
- * local TCP/UDP pcb (default==0). This can prevent creating predictable port
- * numbers after booting a device.
- */
-#if !defined LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS || defined __DOXYGEN__
-#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 0
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ---------- ICMP options ----------
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_icmp ICMP
- * @ingroup lwip_opts_ipv4
- * @{
- */
-/**
- * LWIP_ICMP==1: Enable ICMP module inside the IP stack.
- * Be careful, disable that make your product non-compliant to RFC1122
- */
-#if !defined LWIP_ICMP || defined __DOXYGEN__
-#define LWIP_ICMP 1
-#endif
-
-/**
- * ICMP_TTL: Default value for Time-To-Live used by ICMP packets.
- */
-#if !defined ICMP_TTL || defined __DOXYGEN__
-#define ICMP_TTL (IP_DEFAULT_TTL)
-#endif
-
-/**
- * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)
- */
-#if !defined LWIP_BROADCAST_PING || defined __DOXYGEN__
-#define LWIP_BROADCAST_PING 0
-#endif
-
-/**
- * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)
- */
-#if !defined LWIP_MULTICAST_PING || defined __DOXYGEN__
-#define LWIP_MULTICAST_PING 0
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------
- ---------- RAW options ----------
- ---------------------------------
-*/
-/**
- * @defgroup lwip_opts_raw RAW
- * @ingroup lwip_opts_callback
- * @{
- */
-/**
- * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
- */
-#if !defined LWIP_RAW || defined __DOXYGEN__
-#define LWIP_RAW 0
-#endif
-
-/**
- * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
- */
-#if !defined RAW_TTL || defined __DOXYGEN__
-#define RAW_TTL (IP_DEFAULT_TTL)
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ---------- DHCP options ----------
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_dhcp DHCP
- * @ingroup lwip_opts_ipv4
- * @{
- */
-/**
- * LWIP_DHCP==1: Enable DHCP module.
- */
-#if !defined LWIP_DHCP || defined __DOXYGEN__
-#define LWIP_DHCP 0
-#endif
-#if !LWIP_IPV4
-/* disable DHCP when IPv4 is disabled */
-#undef LWIP_DHCP
-#define LWIP_DHCP 0
-#endif /* !LWIP_IPV4 */
-
-/**
- * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address.
- */
-#if !defined DHCP_DOES_ARP_CHECK || defined __DOXYGEN__
-#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP))
-#endif
-
-/**
- * LWIP_DHCP_CHECK_LINK_UP==1: dhcp_start() only really starts if the netif has
- * NETIF_FLAG_LINK_UP set in its flags. As this is only an optimization and
- * netif drivers might not set this flag, the default is off. If enabled,
- * netif_set_link_up() must be called to continue dhcp starting.
- */
-#if !defined LWIP_DHCP_CHECK_LINK_UP
-#define LWIP_DHCP_CHECK_LINK_UP 0
-#endif
-
-/**
- * LWIP_DHCP_BOOTP_FILE==1: Store offered_si_addr and boot_file_name.
- */
-#if !defined LWIP_DHCP_BOOTP_FILE || defined __DOXYGEN__
-#define LWIP_DHCP_BOOTP_FILE 0
-#endif
-
-/**
- * LWIP_DHCP_GETS_NTP==1: Request NTP servers with discover/select. For each
- * response packet, an callback is called, which has to be provided by the port:
- * void dhcp_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs);
-*/
-#if !defined LWIP_DHCP_GET_NTP_SRV || defined __DOXYGEN__
-#define LWIP_DHCP_GET_NTP_SRV 0
-#endif
-
-/**
- * The maximum of NTP servers requested
- */
-#if !defined LWIP_DHCP_MAX_NTP_SERVERS || defined __DOXYGEN__
-#define LWIP_DHCP_MAX_NTP_SERVERS 1
-#endif
-
-/**
- * LWIP_DHCP_MAX_DNS_SERVERS > 0: Request DNS servers with discover/select.
- * DHCP servers received in the response are passed to DNS via @ref dns_setserver()
- * (up to the maximum limit defined here).
- */
-#if !defined LWIP_DHCP_MAX_DNS_SERVERS || defined __DOXYGEN__
-#define LWIP_DHCP_MAX_DNS_SERVERS DNS_MAX_SERVERS
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ---------- AUTOIP options ----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_autoip AUTOIP
- * @ingroup lwip_opts_ipv4
- * @{
- */
-/**
- * LWIP_AUTOIP==1: Enable AUTOIP module.
- */
-#if !defined LWIP_AUTOIP || defined __DOXYGEN__
-#define LWIP_AUTOIP 0
-#endif
-#if !LWIP_IPV4
-/* disable AUTOIP when IPv4 is disabled */
-#undef LWIP_AUTOIP
-#define LWIP_AUTOIP 0
-#endif /* !LWIP_IPV4 */
-
-/**
- * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on
- * the same interface at the same time.
- */
-#if !defined LWIP_DHCP_AUTOIP_COOP || defined __DOXYGEN__
-#define LWIP_DHCP_AUTOIP_COOP 0
-#endif
-
-/**
- * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes
- * that should be sent before falling back on AUTOIP (the DHCP client keeps
- * running in this case). This can be set as low as 1 to get an AutoIP address
- * very quickly, but you should be prepared to handle a changing IP address
- * when DHCP overrides AutoIP.
- */
-#if !defined LWIP_DHCP_AUTOIP_COOP_TRIES || defined __DOXYGEN__
-#define LWIP_DHCP_AUTOIP_COOP_TRIES 9
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ----- SNMP MIB2 support -----
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_mib2 SNMP MIB2 callbacks
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * LWIP_MIB2_CALLBACKS==1: Turn on SNMP MIB2 callbacks.
- * Turn this on to get callbacks needed to implement MIB2.
- * Usually MIB2_STATS should be enabled, too.
- */
-#if !defined LWIP_MIB2_CALLBACKS || defined __DOXYGEN__
-#define LWIP_MIB2_CALLBACKS 0
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ----- Multicast/IGMP options -----
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_igmp IGMP
- * @ingroup lwip_opts_ipv4
- * @{
- */
-/**
- * LWIP_IGMP==1: Turn on IGMP module.
- */
-#if !defined LWIP_IGMP || defined __DOXYGEN__
-#define LWIP_IGMP 0
-#endif
-#if !LWIP_IPV4
-#undef LWIP_IGMP
-#define LWIP_IGMP 0
-#endif
-
-/**
- * LWIP_MULTICAST_TX_OPTIONS==1: Enable multicast TX support like the socket options
- * IP_MULTICAST_TTL/IP_MULTICAST_IF/IP_MULTICAST_LOOP
- */
-#if !defined LWIP_MULTICAST_TX_OPTIONS || defined __DOXYGEN__
-#define LWIP_MULTICAST_TX_OPTIONS (LWIP_IGMP && LWIP_UDP)
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ---------- DNS options -----------
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_dns DNS
- * @ingroup lwip_opts_callback
- * @{
- */
-/**
- * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS
- * transport.
- */
-#if !defined LWIP_DNS || defined __DOXYGEN__
-#define LWIP_DNS 0
-#endif
-
-/** DNS maximum number of entries to maintain locally. */
-#if !defined DNS_TABLE_SIZE || defined __DOXYGEN__
-#define DNS_TABLE_SIZE 4
-#endif
-
-/** DNS maximum host name length supported in the name table. */
-#if !defined DNS_MAX_NAME_LENGTH || defined __DOXYGEN__
-#define DNS_MAX_NAME_LENGTH 256
-#endif
-
-/** The maximum of DNS servers
- * The first server can be initialized automatically by defining
- * DNS_SERVER_ADDRESS(ipaddr), where 'ipaddr' is an 'ip_addr_t*'
- */
-#if !defined DNS_MAX_SERVERS || defined __DOXYGEN__
-#define DNS_MAX_SERVERS 2
-#endif
-
-/** DNS do a name checking between the query and the response. */
-#if !defined DNS_DOES_NAME_CHECK || defined __DOXYGEN__
-#define DNS_DOES_NAME_CHECK 1
-#endif
-
-/** LWIP_DNS_SECURE: controls the security level of the DNS implementation
- * Use all DNS security features by default.
- * This is overridable but should only be needed by very small targets
- * or when using against non standard DNS servers. */
-#if !defined LWIP_DNS_SECURE || defined __DOXYGEN__
-#define LWIP_DNS_SECURE (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT)
-#endif
-
-/* A list of DNS security features follows */
-#define LWIP_DNS_SECURE_RAND_XID 1
-#define LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING 2
-#define LWIP_DNS_SECURE_RAND_SRC_PORT 4
-
-/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, you have to define an initializer:
- * \#define DNS_LOCAL_HOSTLIST_INIT {DNS_LOCAL_HOSTLIST_ELEM("host_ip4", IPADDR4_INIT_BYTES(1,2,3,4)), \
- * DNS_LOCAL_HOSTLIST_ELEM("host_ip6", IPADDR6_INIT_HOST(123, 234, 345, 456)}
- *
- * Instead, you can also use an external function:
- * \#define DNS_LOOKUP_LOCAL_EXTERN(x) extern err_t my_lookup_function(const char *name, ip_addr_t *addr, u8_t dns_addrtype)
- * that looks up the IP address and returns ERR_OK if found (LWIP_DNS_ADDRTYPE_xxx is passed in dns_addrtype).
- */
-#if !defined DNS_LOCAL_HOSTLIST || defined __DOXYGEN__
-#define DNS_LOCAL_HOSTLIST 0
-#endif /* DNS_LOCAL_HOSTLIST */
-
-/** If this is turned on, the local host-list can be dynamically changed
- * at runtime. */
-#if !defined DNS_LOCAL_HOSTLIST_IS_DYNAMIC || defined __DOXYGEN__
-#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
-
-/** Set this to 1 to enable querying ".local" names via mDNS
- * using a One-Shot Multicast DNS Query */
-#if !defined LWIP_DNS_SUPPORT_MDNS_QUERIES || defined __DOXYGEN__
-#define LWIP_DNS_SUPPORT_MDNS_QUERIES 0
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------
- ---------- UDP options ----------
- ---------------------------------
-*/
-/**
- * @defgroup lwip_opts_udp UDP
- * @ingroup lwip_opts_callback
- * @{
- */
-/**
- * LWIP_UDP==1: Turn on UDP.
- */
-#if !defined LWIP_UDP || defined __DOXYGEN__
-#define LWIP_UDP 1
-#endif
-
-/**
- * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP)
- */
-#if !defined LWIP_UDPLITE || defined __DOXYGEN__
-#define LWIP_UDPLITE 0
-#endif
-
-/**
- * UDP_TTL: Default Time-To-Live value.
- */
-#if !defined UDP_TTL || defined __DOXYGEN__
-#define UDP_TTL (IP_DEFAULT_TTL)
-#endif
-
-/**
- * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf.
- */
-#if !defined LWIP_NETBUF_RECVINFO || defined __DOXYGEN__
-#define LWIP_NETBUF_RECVINFO 0
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------
- ---------- TCP options ----------
- ---------------------------------
-*/
-/**
- * @defgroup lwip_opts_tcp TCP
- * @ingroup lwip_opts_callback
- * @{
- */
-/**
- * LWIP_TCP==1: Turn on TCP.
- */
-#if !defined LWIP_TCP || defined __DOXYGEN__
-#define LWIP_TCP 1
-#endif
-
-/**
- * TCP_TTL: Default Time-To-Live value.
- */
-#if !defined TCP_TTL || defined __DOXYGEN__
-#define TCP_TTL (IP_DEFAULT_TTL)
-#endif
-
-/**
- * TCP_WND: The size of a TCP window. This must be at least
- * (2 * TCP_MSS) for things to work well.
- * ATTENTION: when using TCP_RCV_SCALE, TCP_WND is the total size
- * with scaling applied. Maximum window value in the TCP header
- * will be TCP_WND >> TCP_RCV_SCALE
- */
-#if !defined TCP_WND || defined __DOXYGEN__
-#define TCP_WND (4 * TCP_MSS)
-#endif
-
-/**
- * TCP_MAXRTX: Maximum number of retransmissions of data segments.
- */
-#if !defined TCP_MAXRTX || defined __DOXYGEN__
-#define TCP_MAXRTX 12
-#endif
-
-/**
- * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments.
- */
-#if !defined TCP_SYNMAXRTX || defined __DOXYGEN__
-#define TCP_SYNMAXRTX 6
-#endif
-
-/**
- * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order.
- * Define to 0 if your device is low on memory.
- */
-#if !defined TCP_QUEUE_OOSEQ || defined __DOXYGEN__
-#define TCP_QUEUE_OOSEQ (LWIP_TCP)
-#endif
-
-/**
- * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
- * you might want to increase this.)
- * For the receive side, this MSS is advertised to the remote side
- * when opening a connection. For the transmit size, this MSS sets
- * an upper limit on the MSS advertised by the remote host.
- */
-#if !defined TCP_MSS || defined __DOXYGEN__
-#define TCP_MSS 536
-#endif
-
-/**
- * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really
- * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which
- * reflects the available reassembly buffer size at the remote host) and the
- * largest size permitted by the IP layer" (RFC 1122)
- * Setting this to 1 enables code that checks TCP_MSS against the MTU of the
- * netif used for a connection and limits the MSS if it would be too big otherwise.
- */
-#if !defined TCP_CALCULATE_EFF_SEND_MSS || defined __DOXYGEN__
-#define TCP_CALCULATE_EFF_SEND_MSS 1
-#endif
-
-/**
- * TCP_SND_BUF: TCP sender buffer space (bytes).
- * To achieve good performance, this should be at least 2 * TCP_MSS.
- */
-#if !defined TCP_SND_BUF || defined __DOXYGEN__
-#define TCP_SND_BUF (2 * TCP_MSS)
-#endif
-
-/**
- * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
- * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work.
- */
-#if !defined TCP_SND_QUEUELEN || defined __DOXYGEN__
-#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))
-#endif
-
-/**
- * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than
- * TCP_SND_BUF. It is the amount of space which must be available in the
- * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT).
- */
-#if !defined TCP_SNDLOWAT || defined __DOXYGEN__
-#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1)
-#endif
-
-/**
- * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less
- * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below
- * this number, select returns writable (combined with TCP_SNDLOWAT).
- */
-#if !defined TCP_SNDQUEUELOWAT || defined __DOXYGEN__
-#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
-#endif
-
-/**
- * TCP_OOSEQ_MAX_BYTES: The maximum number of bytes queued on ooseq per pcb.
- * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==1.
- */
-#if !defined TCP_OOSEQ_MAX_BYTES || defined __DOXYGEN__
-#define TCP_OOSEQ_MAX_BYTES 0
-#endif
-
-/**
- * TCP_OOSEQ_MAX_PBUFS: The maximum number of pbufs queued on ooseq per pcb.
- * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==1.
- */
-#if !defined TCP_OOSEQ_MAX_PBUFS || defined __DOXYGEN__
-#define TCP_OOSEQ_MAX_PBUFS 0
-#endif
-
-/**
- * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb.
- */
-#if !defined TCP_LISTEN_BACKLOG || defined __DOXYGEN__
-#define TCP_LISTEN_BACKLOG 0
-#endif
-
-/**
- * The maximum allowed backlog for TCP listen netconns.
- * This backlog is used unless another is explicitly specified.
- * 0xff is the maximum (u8_t).
- */
-#if !defined TCP_DEFAULT_LISTEN_BACKLOG || defined __DOXYGEN__
-#define TCP_DEFAULT_LISTEN_BACKLOG 0xff
-#endif
-
-/**
- * TCP_OVERSIZE: The maximum number of bytes that tcp_write may
- * allocate ahead of time in an attempt to create shorter pbuf chains
- * for transmission. The meaningful range is 0 to TCP_MSS. Some
- * suggested values are:
- *
- * 0: Disable oversized allocation. Each tcp_write() allocates a new
- pbuf (old behaviour).
- * 1: Allocate size-aligned pbufs with minimal excess. Use this if your
- * scatter-gather DMA requires aligned fragments.
- * 128: Limit the pbuf/memory overhead to 20%.
- * TCP_MSS: Try to create unfragmented TCP packets.
- * TCP_MSS/4: Try to create 4 fragments or less per TCP packet.
- */
-#if !defined TCP_OVERSIZE || defined __DOXYGEN__
-#define TCP_OVERSIZE TCP_MSS
-#endif
-
-/**
- * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option.
- * The timestamp option is currently only used to help remote hosts, it is not
- * really used locally. Therefore, it is only enabled when a TS option is
- * received in the initial SYN packet from a remote host.
- */
-#if !defined LWIP_TCP_TIMESTAMPS || defined __DOXYGEN__
-#define LWIP_TCP_TIMESTAMPS 0
-#endif
-
-/**
- * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an
- * explicit window update
- */
-#if !defined TCP_WND_UPDATE_THRESHOLD || defined __DOXYGEN__
-#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
-#endif
-
-/**
- * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1.
- * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all
- * events (accept, sent, etc) that happen in the system.
- * LWIP_CALLBACK_API==1: The PCB callback function is called directly
- * for the event. This is the default.
- */
-#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) || defined __DOXYGEN__
-#define LWIP_EVENT_API 0
-#define LWIP_CALLBACK_API 1
-#else
-#ifndef LWIP_EVENT_API
-#define LWIP_EVENT_API 0
-#endif
-#ifndef LWIP_CALLBACK_API
-#define LWIP_CALLBACK_API 0
-#endif
-#endif
-
-/**
- * LWIP_WND_SCALE and TCP_RCV_SCALE:
- * Set LWIP_WND_SCALE to 1 to enable window scaling.
- * Set TCP_RCV_SCALE to the desired scaling factor (shift count in the
- * range of [0..14]).
- * When LWIP_WND_SCALE is enabled but TCP_RCV_SCALE is 0, we can use a large
- * send window while having a small receive window only.
- */
-#if !defined LWIP_WND_SCALE || defined __DOXYGEN__
-#define LWIP_WND_SCALE 0
-#define TCP_RCV_SCALE 0
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------
- ---------- Pbuf options ----------
- ----------------------------------
-*/
-/**
- * @defgroup lwip_opts_pbuf PBUF
- * @ingroup lwip_opts
- * @{
- */
-/**
- * PBUF_LINK_HLEN: the number of bytes that should be allocated for a
- * link level header. The default is 14, the standard value for
- * Ethernet.
- */
-#if !defined PBUF_LINK_HLEN || defined __DOXYGEN__
-#if defined LWIP_HOOK_VLAN_SET && !defined __DOXYGEN__
-#define PBUF_LINK_HLEN (18 + ETH_PAD_SIZE)
-#else /* LWIP_HOOK_VLAN_SET */
-#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE)
-#endif /* LWIP_HOOK_VLAN_SET */
-#endif
-
-/**
- * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated
- * for an additional encapsulation header before ethernet headers (e.g. 802.11)
- */
-#if !defined PBUF_LINK_ENCAPSULATION_HLEN || defined __DOXYGEN__
-#define PBUF_LINK_ENCAPSULATION_HLEN 0u
-#endif
-
-/**
- * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
- * designed to accommodate single full size TCP frame in one pbuf, including
- * TCP_MSS, IP header, and link header.
- */
-#if !defined PBUF_POOL_BUFSIZE || defined __DOXYGEN__
-#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------------------
- ---------- Network Interfaces options ----------
- ------------------------------------------------
-*/
-/**
- * @defgroup lwip_opts_netif NETIF
- * @ingroup lwip_opts
- * @{
- */
-/**
- * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname
- * field.
- */
-#if !defined LWIP_NETIF_HOSTNAME || defined __DOXYGEN__
-#define LWIP_NETIF_HOSTNAME 0
-#endif
-
-/**
- * LWIP_NETIF_API==1: Support netif api (in netifapi.c)
- */
-#if !defined LWIP_NETIF_API || defined __DOXYGEN__
-#define LWIP_NETIF_API 0
-#endif
-
-/**
- * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface
- * changes its up/down status (i.e., due to DHCP IP acquisition)
- */
-#if !defined LWIP_NETIF_STATUS_CALLBACK || defined __DOXYGEN__
-#define LWIP_NETIF_STATUS_CALLBACK 0
-#endif
-
-/**
- * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface
- * whenever the link changes (i.e., link down)
- */
-#if !defined LWIP_NETIF_LINK_CALLBACK || defined __DOXYGEN__
-#define LWIP_NETIF_LINK_CALLBACK 0
-#endif
-
-/**
- * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called
- * when a netif has been removed
- */
-#if !defined LWIP_NETIF_REMOVE_CALLBACK || defined __DOXYGEN__
-#define LWIP_NETIF_REMOVE_CALLBACK 0
-#endif
-
-/**
- * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table
- * indices) in struct netif. TCP and UDP can make use of this to prevent
- * scanning the ARP table for every sent packet. While this is faster for big
- * ARP tables or many concurrent connections, it might be counterproductive
- * if you have a tiny ARP table or if there never are concurrent connections.
- */
-#if !defined LWIP_NETIF_HWADDRHINT || defined __DOXYGEN__
-#define LWIP_NETIF_HWADDRHINT 0
-#endif
-
-/**
- * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data
- * to be sent into one single pbuf. This is for compatibility with DMA-enabled
- * MACs that do not support scatter-gather.
- * Beware that this might involve CPU-memcpy before transmitting that would not
- * be needed without this flag! Use this only if you need to!
- *
- * @todo: TCP and IP-frag do not work with this, yet:
- */
-#if !defined LWIP_NETIF_TX_SINGLE_PBUF || defined __DOXYGEN__
-#define LWIP_NETIF_TX_SINGLE_PBUF 0
-#endif /* LWIP_NETIF_TX_SINGLE_PBUF */
-
-/**
- * LWIP_NUM_NETIF_CLIENT_DATA: Number of clients that may store
- * data in client_data member array of struct netif.
- */
-#if !defined LWIP_NUM_NETIF_CLIENT_DATA || defined __DOXYGEN__
-#define LWIP_NUM_NETIF_CLIENT_DATA 0
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ---------- LOOPIF options ----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_loop Loopback interface
- * @ingroup lwip_opts_netif
- * @{
- */
-/**
- * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1).
- * This is only needed when no real netifs are available. If at least one other
- * netif is available, loopback traffic uses this netif.
- */
-#if !defined LWIP_HAVE_LOOPIF || defined __DOXYGEN__
-#define LWIP_HAVE_LOOPIF LWIP_NETIF_LOOPBACK
-#endif
-
-/**
- * LWIP_LOOPIF_MULTICAST==1: Support multicast/IGMP on loop interface (127.0.0.1).
- */
-#if !defined LWIP_LOOPIF_MULTICAST || defined __DOXYGEN__
-#define LWIP_LOOPIF_MULTICAST 0
-#endif
-
-/**
- * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP
- * address equal to the netif IP address, looping them back up the stack.
- */
-#if !defined LWIP_NETIF_LOOPBACK || defined __DOXYGEN__
-#define LWIP_NETIF_LOOPBACK 0
-#endif
-
-/**
- * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback
- * sending for each netif (0 = disabled)
- */
-#if !defined LWIP_LOOPBACK_MAX_PBUFS || defined __DOXYGEN__
-#define LWIP_LOOPBACK_MAX_PBUFS 0
-#endif
-
-/**
- * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in
- * the system, as netifs must change how they behave depending on this setting
- * for the LWIP_NETIF_LOOPBACK option to work.
- * Setting this is needed to avoid reentering non-reentrant functions like
- * tcp_input().
- * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a
- * multithreaded environment like tcpip.c. In this case, netif->input()
- * is called directly.
- * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup.
- * The packets are put on a list and netif_poll() must be called in
- * the main application loop.
- */
-#if !defined LWIP_NETIF_LOOPBACK_MULTITHREADING || defined __DOXYGEN__
-#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS)
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ---------- Thread options ----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_thread Threading
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.
- */
-#if !defined TCPIP_THREAD_NAME || defined __DOXYGEN__
-#define TCPIP_THREAD_NAME "tcpip_thread"
-#endif
-
-/**
- * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
- * The stack size value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined TCPIP_THREAD_STACKSIZE || defined __DOXYGEN__
-#define TCPIP_THREAD_STACKSIZE 0
-#endif
-
-/**
- * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
- * The priority value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined TCPIP_THREAD_PRIO || defined __DOXYGEN__
-#define TCPIP_THREAD_PRIO 1
-#endif
-
-/**
- * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages
- * The queue size value itself is platform-dependent, but is passed to
- * sys_mbox_new() when tcpip_init is called.
- */
-#if !defined TCPIP_MBOX_SIZE || defined __DOXYGEN__
-#define TCPIP_MBOX_SIZE 0
-#endif
-
-/**
- * Define this to something that triggers a watchdog. This is called from
- * tcpip_thread after processing a message.
- */
-#if !defined LWIP_TCPIP_THREAD_ALIVE || defined __DOXYGEN__
-#define LWIP_TCPIP_THREAD_ALIVE()
-#endif
-
-/**
- * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread.
- */
-#if !defined SLIPIF_THREAD_NAME || defined __DOXYGEN__
-#define SLIPIF_THREAD_NAME "slipif_loop"
-#endif
-
-/**
- * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread.
- * The stack size value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined SLIPIF_THREAD_STACKSIZE || defined __DOXYGEN__
-#define SLIPIF_THREAD_STACKSIZE 0
-#endif
-
-/**
- * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread.
- * The priority value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined SLIPIF_THREAD_PRIO || defined __DOXYGEN__
-#define SLIPIF_THREAD_PRIO 1
-#endif
-
-/**
- * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread.
- */
-#if !defined DEFAULT_THREAD_NAME || defined __DOXYGEN__
-#define DEFAULT_THREAD_NAME "lwIP"
-#endif
-
-/**
- * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.
- * The stack size value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined DEFAULT_THREAD_STACKSIZE || defined __DOXYGEN__
-#define DEFAULT_THREAD_STACKSIZE 0
-#endif
-
-/**
- * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread.
- * The priority value itself is platform-dependent, but is passed to
- * sys_thread_new() when the thread is created.
- */
-#if !defined DEFAULT_THREAD_PRIO || defined __DOXYGEN__
-#define DEFAULT_THREAD_PRIO 1
-#endif
-
-/**
- * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
- * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed
- * to sys_mbox_new() when the recvmbox is created.
- */
-#if !defined DEFAULT_RAW_RECVMBOX_SIZE || defined __DOXYGEN__
-#define DEFAULT_RAW_RECVMBOX_SIZE 0
-#endif
-
-/**
- * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
- * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed
- * to sys_mbox_new() when the recvmbox is created.
- */
-#if !defined DEFAULT_UDP_RECVMBOX_SIZE || defined __DOXYGEN__
-#define DEFAULT_UDP_RECVMBOX_SIZE 0
-#endif
-
-/**
- * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
- * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed
- * to sys_mbox_new() when the recvmbox is created.
- */
-#if !defined DEFAULT_TCP_RECVMBOX_SIZE || defined __DOXYGEN__
-#define DEFAULT_TCP_RECVMBOX_SIZE 0
-#endif
-
-/**
- * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.
- * The queue size value itself is platform-dependent, but is passed to
- * sys_mbox_new() when the acceptmbox is created.
- */
-#if !defined DEFAULT_ACCEPTMBOX_SIZE || defined __DOXYGEN__
-#define DEFAULT_ACCEPTMBOX_SIZE 0
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------------------
- ---------- Sequential layer options ----------
- ----------------------------------------------
-*/
-/**
- * @defgroup lwip_opts_netconn Netconn
- * @ingroup lwip_opts_threadsafe_apis
- * @{
- */
-/**
- * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
- */
-#if !defined LWIP_NETCONN || defined __DOXYGEN__
-#define LWIP_NETCONN 1
-#endif
-
-/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout to create
- * timers running in tcpip_thread from another thread.
- */
-#if !defined LWIP_TCPIP_TIMEOUT || defined __DOXYGEN__
-#define LWIP_TCPIP_TIMEOUT 0
-#endif
-
-/** LWIP_NETCONN_SEM_PER_THREAD==1: Use one (thread-local) semaphore per
- * thread calling socket/netconn functions instead of allocating one
- * semaphore per netconn (and per select etc.)
- * ATTENTION: a thread-local semaphore for API calls is needed:
- * - LWIP_NETCONN_THREAD_SEM_GET() returning a sys_sem_t*
- * - LWIP_NETCONN_THREAD_SEM_ALLOC() creating the semaphore
- * - LWIP_NETCONN_THREAD_SEM_FREE() freeing the semaphore
- * The latter 2 can be invoked up by calling netconn_thread_init()/netconn_thread_cleanup().
- * Ports may call these for threads created with sys_thread_new().
- */
-#if !defined LWIP_NETCONN_SEM_PER_THREAD || defined __DOXYGEN__
-#define LWIP_NETCONN_SEM_PER_THREAD 0
-#endif
-
-/** LWIP_NETCONN_FULLDUPLEX==1: Enable code that allows reading from one thread,
- * writing from a 2nd thread and closing from a 3rd thread at the same time.
- * ATTENTION: This is currently really alpha! Some requirements:
- * - LWIP_NETCONN_SEM_PER_THREAD==1 is required to use one socket/netconn from
- * multiple threads at once
- * - sys_mbox_free() has to unblock receive tasks waiting on recvmbox/acceptmbox
- * and prevent a task pending on this during/after deletion
- */
-#if !defined LWIP_NETCONN_FULLDUPLEX || defined __DOXYGEN__
-#define LWIP_NETCONN_FULLDUPLEX 0
-#endif
-/**
- * @}
- */
-
-/*
- ------------------------------------
- ---------- Socket options ----------
- ------------------------------------
-*/
-/**
- * @defgroup lwip_opts_socket Sockets
- * @ingroup lwip_opts_threadsafe_apis
- * @{
- */
-/**
- * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
- */
-#if !defined LWIP_SOCKET || defined __DOXYGEN__
-#define LWIP_SOCKET 1
-#endif
-
-/* LWIP_SOCKET_SET_ERRNO==1: Set errno when socket functions cannot complete
- * successfully, as required by POSIX. Default is POSIX-compliant.
- */
-#if !defined LWIP_SOCKET_SET_ERRNO || defined __DOXYGEN__
-#define LWIP_SOCKET_SET_ERRNO 1
-#endif
-
-/**
- * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names through defines.
- * LWIP_COMPAT_SOCKETS==2: Same as ==1 but correctly named functions are created.
- * While this helps code completion, it might conflict with existing libraries.
- * (only used if you use sockets.c)
- */
-#if !defined LWIP_COMPAT_SOCKETS || defined __DOXYGEN__
-#define LWIP_COMPAT_SOCKETS 1
-#endif
-
-/**
- * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names.
- * Disable this option if you use a POSIX operating system that uses the same
- * names (read, write & close). (only used if you use sockets.c)
- */
-#if !defined LWIP_POSIX_SOCKETS_IO_NAMES || defined __DOXYGEN__
-#define LWIP_POSIX_SOCKETS_IO_NAMES 1
-#endif
-
-/**
- * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n.
- * This can be useful when there are multiple APIs which create file descriptors.
- * When they all start with a different offset and you won't make them overlap you can
- * re implement read/write/close/ioctl/fnctl to send the requested action to the right
- * library (sharing select will need more work though).
- */
-#if !defined LWIP_SOCKET_OFFSET || defined __DOXYGEN__
-#define LWIP_SOCKET_OFFSET 0
-#endif
-
-/**
- * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT
- * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set
- * in seconds. (does not require sockets.c, and will affect tcp.c)
- */
-#if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__
-#define LWIP_TCP_KEEPALIVE 0
-#endif
-
-/**
- * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and
- * SO_SNDTIMEO processing.
- */
-#if !defined LWIP_SO_SNDTIMEO || defined __DOXYGEN__
-#define LWIP_SO_SNDTIMEO 0
-#endif
-
-/**
- * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and
- * SO_RCVTIMEO processing.
- */
-#if !defined LWIP_SO_RCVTIMEO || defined __DOXYGEN__
-#define LWIP_SO_RCVTIMEO 0
-#endif
-
-/**
- * LWIP_SO_SNDRCVTIMEO_NONSTANDARD==1: SO_RCVTIMEO/SO_SNDTIMEO take an int
- * (milliseconds, much like winsock does) instead of a struct timeval (default).
- */
-#if !defined LWIP_SO_SNDRCVTIMEO_NONSTANDARD || defined __DOXYGEN__
-#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0
-#endif
-
-/**
- * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing.
- */
-#if !defined LWIP_SO_RCVBUF || defined __DOXYGEN__
-#define LWIP_SO_RCVBUF 0
-#endif
-
-/**
- * LWIP_SO_LINGER==1: Enable SO_LINGER processing.
- */
-#if !defined LWIP_SO_LINGER || defined __DOXYGEN__
-#define LWIP_SO_LINGER 0
-#endif
-
-/**
- * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize.
- */
-#if !defined RECV_BUFSIZE_DEFAULT || defined __DOXYGEN__
-#define RECV_BUFSIZE_DEFAULT INT_MAX
-#endif
-
-/**
- * By default, TCP socket/netconn close waits 20 seconds max to send the FIN
- */
-#if !defined LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT || defined __DOXYGEN__
-#define LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT 20000
-#endif
-
-/**
- * SO_REUSE==1: Enable SO_REUSEADDR option.
- */
-#if !defined SO_REUSE || defined __DOXYGEN__
-#define SO_REUSE 0
-#endif
-
-/**
- * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets
- * to all local matches if SO_REUSEADDR is turned on.
- * WARNING: Adds a memcpy for every packet if passing to more than one pcb!
- */
-#if !defined SO_REUSE_RXTOALL || defined __DOXYGEN__
-#define SO_REUSE_RXTOALL 0
-#endif
-
-/**
- * LWIP_FIONREAD_LINUXMODE==0 (default): ioctl/FIONREAD returns the amount of
- * pending data in the network buffer. This is the way windows does it. It's
- * the default for lwIP since it is smaller.
- * LWIP_FIONREAD_LINUXMODE==1: ioctl/FIONREAD returns the size of the next
- * pending datagram in bytes. This is the way linux does it. This code is only
- * here for compatibility.
- */
-#if !defined LWIP_FIONREAD_LINUXMODE || defined __DOXYGEN__
-#define LWIP_FIONREAD_LINUXMODE 0
-#endif
-/**
- * @}
- */
-
-/*
- ----------------------------------------
- ---------- Statistics options ----------
- ----------------------------------------
-*/
-/**
- * @defgroup lwip_opts_stats Statistics
- * @ingroup lwip_opts_debug
- * @{
- */
-/**
- * LWIP_STATS==1: Enable statistics collection in lwip_stats.
- */
-#if !defined LWIP_STATS || defined __DOXYGEN__
-#define LWIP_STATS 1
-#endif
-
-#if LWIP_STATS
-
-/**
- * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions.
- */
-#if !defined LWIP_STATS_DISPLAY || defined __DOXYGEN__
-#define LWIP_STATS_DISPLAY 0
-#endif
-
-/**
- * LINK_STATS==1: Enable link stats.
- */
-#if !defined LINK_STATS || defined __DOXYGEN__
-#define LINK_STATS 1
-#endif
-
-/**
- * ETHARP_STATS==1: Enable etharp stats.
- */
-#if !defined ETHARP_STATS || defined __DOXYGEN__
-#define ETHARP_STATS (LWIP_ARP)
-#endif
-
-/**
- * IP_STATS==1: Enable IP stats.
- */
-#if !defined IP_STATS || defined __DOXYGEN__
-#define IP_STATS 1
-#endif
-
-/**
- * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is
- * on if using either frag or reass.
- */
-#if !defined IPFRAG_STATS || defined __DOXYGEN__
-#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG)
-#endif
-
-/**
- * ICMP_STATS==1: Enable ICMP stats.
- */
-#if !defined ICMP_STATS || defined __DOXYGEN__
-#define ICMP_STATS 1
-#endif
-
-/**
- * IGMP_STATS==1: Enable IGMP stats.
- */
-#if !defined IGMP_STATS || defined __DOXYGEN__
-#define IGMP_STATS (LWIP_IGMP)
-#endif
-
-/**
- * UDP_STATS==1: Enable UDP stats. Default is on if
- * UDP enabled, otherwise off.
- */
-#if !defined UDP_STATS || defined __DOXYGEN__
-#define UDP_STATS (LWIP_UDP)
-#endif
-
-/**
- * TCP_STATS==1: Enable TCP stats. Default is on if TCP
- * enabled, otherwise off.
- */
-#if !defined TCP_STATS || defined __DOXYGEN__
-#define TCP_STATS (LWIP_TCP)
-#endif
-
-/**
- * MEM_STATS==1: Enable mem.c stats.
- */
-#if !defined MEM_STATS || defined __DOXYGEN__
-#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0))
-#endif
-
-/**
- * MEMP_STATS==1: Enable memp.c pool stats.
- */
-#if !defined MEMP_STATS || defined __DOXYGEN__
-#define MEMP_STATS (MEMP_MEM_MALLOC == 0)
-#endif
-
-/**
- * SYS_STATS==1: Enable system stats (sem and mbox counts, etc).
- */
-#if !defined SYS_STATS || defined __DOXYGEN__
-#define SYS_STATS (NO_SYS == 0)
-#endif
-
-/**
- * IP6_STATS==1: Enable IPv6 stats.
- */
-#if !defined IP6_STATS || defined __DOXYGEN__
-#define IP6_STATS (LWIP_IPV6)
-#endif
-
-/**
- * ICMP6_STATS==1: Enable ICMP for IPv6 stats.
- */
-#if !defined ICMP6_STATS || defined __DOXYGEN__
-#define ICMP6_STATS (LWIP_IPV6 && LWIP_ICMP6)
-#endif
-
-/**
- * IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats.
- */
-#if !defined IP6_FRAG_STATS || defined __DOXYGEN__
-#define IP6_FRAG_STATS (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS))
-#endif
-
-/**
- * MLD6_STATS==1: Enable MLD for IPv6 stats.
- */
-#if !defined MLD6_STATS || defined __DOXYGEN__
-#define MLD6_STATS (LWIP_IPV6 && LWIP_IPV6_MLD)
-#endif
-
-/**
- * ND6_STATS==1: Enable Neighbor discovery for IPv6 stats.
- */
-#if !defined ND6_STATS || defined __DOXYGEN__
-#define ND6_STATS (LWIP_IPV6)
-#endif
-
-/**
- * MIB2_STATS==1: Stats for SNMP MIB2.
- */
-#if !defined MIB2_STATS || defined __DOXYGEN__
-#define MIB2_STATS 0
-#endif
-
-#else
-
-#define LINK_STATS 0
-#define ETHARP_STATS 0
-#define IP_STATS 0
-#define IPFRAG_STATS 0
-#define ICMP_STATS 0
-#define IGMP_STATS 0
-#define UDP_STATS 0
-#define TCP_STATS 0
-#define MEM_STATS 0
-#define MEMP_STATS 0
-#define SYS_STATS 0
-#define LWIP_STATS_DISPLAY 0
-#define IP6_STATS 0
-#define ICMP6_STATS 0
-#define IP6_FRAG_STATS 0
-#define MLD6_STATS 0
-#define ND6_STATS 0
-#define MIB2_STATS 0
-
-#endif /* LWIP_STATS */
-/**
- * @}
- */
-
-/*
- --------------------------------------
- ---------- Checksum options ----------
- --------------------------------------
-*/
-/**
- * @defgroup lwip_opts_checksum Checksum
- * @ingroup lwip_opts_infrastructure
- * @{
- */
-/**
- * LWIP_CHECKSUM_CTRL_PER_NETIF==1: Checksum generation/check can be enabled/disabled
- * per netif.
- * ATTENTION: if enabled, the CHECKSUM_GEN_* and CHECKSUM_CHECK_* defines must be enabled!
- */
-#if !defined LWIP_CHECKSUM_CTRL_PER_NETIF || defined __DOXYGEN__
-#define LWIP_CHECKSUM_CTRL_PER_NETIF 0
-#endif
-
-/**
- * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.
- */
-#if !defined CHECKSUM_GEN_IP || defined __DOXYGEN__
-#define CHECKSUM_GEN_IP 1
-#endif
-
-/**
- * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.
- */
-#if !defined CHECKSUM_GEN_UDP || defined __DOXYGEN__
-#define CHECKSUM_GEN_UDP 1
-#endif
-
-/**
- * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.
- */
-#if !defined CHECKSUM_GEN_TCP || defined __DOXYGEN__
-#define CHECKSUM_GEN_TCP 1
-#endif
-
-/**
- * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets.
- */
-#if !defined CHECKSUM_GEN_ICMP || defined __DOXYGEN__
-#define CHECKSUM_GEN_ICMP 1
-#endif
-
-/**
- * CHECKSUM_GEN_ICMP6==1: Generate checksums in software for outgoing ICMP6 packets.
- */
-#if !defined CHECKSUM_GEN_ICMP6 || defined __DOXYGEN__
-#define CHECKSUM_GEN_ICMP6 1
-#endif
-
-/**
- * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.
- */
-#if !defined CHECKSUM_CHECK_IP || defined __DOXYGEN__
-#define CHECKSUM_CHECK_IP 1
-#endif
-
-/**
- * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.
- */
-#if !defined CHECKSUM_CHECK_UDP || defined __DOXYGEN__
-#define CHECKSUM_CHECK_UDP 1
-#endif
-
-/**
- * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.
- */
-#if !defined CHECKSUM_CHECK_TCP || defined __DOXYGEN__
-#define CHECKSUM_CHECK_TCP 1
-#endif
-
-/**
- * CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets.
- */
-#if !defined CHECKSUM_CHECK_ICMP || defined __DOXYGEN__
-#define CHECKSUM_CHECK_ICMP 1
-#endif
-
-/**
- * CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets
- */
-#if !defined CHECKSUM_CHECK_ICMP6 || defined __DOXYGEN__
-#define CHECKSUM_CHECK_ICMP6 1
-#endif
-
-/**
- * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from
- * application buffers to pbufs.
- */
-#if !defined LWIP_CHECKSUM_ON_COPY || defined __DOXYGEN__
-#define LWIP_CHECKSUM_ON_COPY 0
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------------
- ---------- IPv6 options ---------------
- ---------------------------------------
-*/
-/**
- * @defgroup lwip_opts_ipv6 IPv6
- * @ingroup lwip_opts
- * @{
- */
-/**
- * LWIP_IPV6==1: Enable IPv6
- */
-#if !defined LWIP_IPV6 || defined __DOXYGEN__
-#define LWIP_IPV6 0
-#endif
-
-/**
- * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif.
- */
-#if !defined LWIP_IPV6_NUM_ADDRESSES || defined __DOXYGEN__
-#define LWIP_IPV6_NUM_ADDRESSES 3
-#endif
-
-/**
- * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs
- */
-#if !defined LWIP_IPV6_FORWARD || defined __DOXYGEN__
-#define LWIP_IPV6_FORWARD 0
-#endif
-
-/**
- * LWIP_IPV6_FRAG==1: Fragment outgoing IPv6 packets that are too big.
- */
-#if !defined LWIP_IPV6_FRAG || defined __DOXYGEN__
-#define LWIP_IPV6_FRAG 0
-#endif
-
-/**
- * LWIP_IPV6_REASS==1: reassemble incoming IPv6 packets that fragmented
- */
-#if !defined LWIP_IPV6_REASS || defined __DOXYGEN__
-#define LWIP_IPV6_REASS (LWIP_IPV6)
-#endif
-
-/**
- * LWIP_IPV6_SEND_ROUTER_SOLICIT==1: Send router solicitation messages during
- * network startup.
- */
-#if !defined LWIP_IPV6_SEND_ROUTER_SOLICIT || defined __DOXYGEN__
-#define LWIP_IPV6_SEND_ROUTER_SOLICIT 1
-#endif
-
-/**
- * LWIP_IPV6_AUTOCONFIG==1: Enable stateless address autoconfiguration as per RFC 4862.
- */
-#if !defined LWIP_IPV6_AUTOCONFIG || defined __DOXYGEN__
-#define LWIP_IPV6_AUTOCONFIG (LWIP_IPV6)
-#endif
-
-/**
- * LWIP_IPV6_DUP_DETECT_ATTEMPTS=[0..7]: Number of duplicate address detection attempts.
- */
-#if !defined LWIP_IPV6_DUP_DETECT_ATTEMPTS || defined __DOXYGEN__
-#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 1
-#endif
-/**
- * @}
- */
-
-/**
- * @defgroup lwip_opts_icmp6 ICMP6
- * @ingroup lwip_opts_ipv6
- * @{
- */
-/**
- * LWIP_ICMP6==1: Enable ICMPv6 (mandatory per RFC)
- */
-#if !defined LWIP_ICMP6 || defined __DOXYGEN__
-#define LWIP_ICMP6 (LWIP_IPV6)
-#endif
-
-/**
- * LWIP_ICMP6_DATASIZE: bytes from original packet to send back in
- * ICMPv6 error messages.
- */
-#if !defined LWIP_ICMP6_DATASIZE || defined __DOXYGEN__
-#define LWIP_ICMP6_DATASIZE 8
-#endif
-
-/**
- * LWIP_ICMP6_HL: default hop limit for ICMPv6 messages
- */
-#if !defined LWIP_ICMP6_HL || defined __DOXYGEN__
-#define LWIP_ICMP6_HL 255
-#endif
-/**
- * @}
- */
-
-/**
- * @defgroup lwip_opts_mld6 Multicast listener discovery
- * @ingroup lwip_opts_ipv6
- * @{
- */
-/**
- * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol.
- * If LWIP_IPV6 is enabled but this setting is disabled, the MAC layer must
- * indiscriminately pass all inbound IPv6 multicast traffic to lwIP.
- */
-#if !defined LWIP_IPV6_MLD || defined __DOXYGEN__
-#define LWIP_IPV6_MLD (LWIP_IPV6)
-#endif
-
-/**
- * MEMP_NUM_MLD6_GROUP: Max number of IPv6 multicast groups that can be joined.
- * There must be enough groups so that each netif can join the solicited-node
- * multicast group for each of its local addresses, plus one for MDNS if
- * applicable, plus any number of groups to be joined on UDP sockets.
- */
-#if !defined MEMP_NUM_MLD6_GROUP || defined __DOXYGEN__
-#define MEMP_NUM_MLD6_GROUP 4
-#endif
-/**
- * @}
- */
-
-/**
- * @defgroup lwip_opts_nd6 Neighbor discovery
- * @ingroup lwip_opts_ipv6
- * @{
- */
-/**
- * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address
- * is being resolved.
- */
-#if !defined LWIP_ND6_QUEUEING || defined __DOXYGEN__
-#define LWIP_ND6_QUEUEING (LWIP_IPV6)
-#endif
-
-/**
- * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC resolution.
- */
-#if !defined MEMP_NUM_ND6_QUEUE || defined __DOXYGEN__
-#define MEMP_NUM_ND6_QUEUE 20
-#endif
-
-/**
- * LWIP_ND6_NUM_NEIGHBORS: Number of entries in IPv6 neighbor cache
- */
-#if !defined LWIP_ND6_NUM_NEIGHBORS || defined __DOXYGEN__
-#define LWIP_ND6_NUM_NEIGHBORS 10
-#endif
-
-/**
- * LWIP_ND6_NUM_DESTINATIONS: number of entries in IPv6 destination cache
- */
-#if !defined LWIP_ND6_NUM_DESTINATIONS || defined __DOXYGEN__
-#define LWIP_ND6_NUM_DESTINATIONS 10
-#endif
-
-/**
- * LWIP_ND6_NUM_PREFIXES: number of entries in IPv6 on-link prefixes cache
- */
-#if !defined LWIP_ND6_NUM_PREFIXES || defined __DOXYGEN__
-#define LWIP_ND6_NUM_PREFIXES 5
-#endif
-
-/**
- * LWIP_ND6_NUM_ROUTERS: number of entries in IPv6 default router cache
- */
-#if !defined LWIP_ND6_NUM_ROUTERS || defined __DOXYGEN__
-#define LWIP_ND6_NUM_ROUTERS 3
-#endif
-
-/**
- * LWIP_ND6_MAX_MULTICAST_SOLICIT: max number of multicast solicit messages to send
- * (neighbor solicit and router solicit)
- */
-#if !defined LWIP_ND6_MAX_MULTICAST_SOLICIT || defined __DOXYGEN__
-#define LWIP_ND6_MAX_MULTICAST_SOLICIT 3
-#endif
-
-/**
- * LWIP_ND6_MAX_UNICAST_SOLICIT: max number of unicast neighbor solicitation messages
- * to send during neighbor reachability detection.
- */
-#if !defined LWIP_ND6_MAX_UNICAST_SOLICIT || defined __DOXYGEN__
-#define LWIP_ND6_MAX_UNICAST_SOLICIT 3
-#endif
-
-/**
- * Unused: See ND RFC (time in milliseconds).
- */
-#if !defined LWIP_ND6_MAX_ANYCAST_DELAY_TIME || defined __DOXYGEN__
-#define LWIP_ND6_MAX_ANYCAST_DELAY_TIME 1000
-#endif
-
-/**
- * Unused: See ND RFC
- */
-#if !defined LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT || defined __DOXYGEN__
-#define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT 3
-#endif
-
-/**
- * LWIP_ND6_REACHABLE_TIME: default neighbor reachable time (in milliseconds).
- * May be updated by router advertisement messages.
- */
-#if !defined LWIP_ND6_REACHABLE_TIME || defined __DOXYGEN__
-#define LWIP_ND6_REACHABLE_TIME 30000
-#endif
-
-/**
- * LWIP_ND6_RETRANS_TIMER: default retransmission timer for solicitation messages
- */
-#if !defined LWIP_ND6_RETRANS_TIMER || defined __DOXYGEN__
-#define LWIP_ND6_RETRANS_TIMER 1000
-#endif
-
-/**
- * LWIP_ND6_DELAY_FIRST_PROBE_TIME: Delay before first unicast neighbor solicitation
- * message is sent, during neighbor reachability detection.
- */
-#if !defined LWIP_ND6_DELAY_FIRST_PROBE_TIME || defined __DOXYGEN__
-#define LWIP_ND6_DELAY_FIRST_PROBE_TIME 5000
-#endif
-
-/**
- * LWIP_ND6_ALLOW_RA_UPDATES==1: Allow Router Advertisement messages to update
- * Reachable time and retransmission timers, and netif MTU.
- */
-#if !defined LWIP_ND6_ALLOW_RA_UPDATES || defined __DOXYGEN__
-#define LWIP_ND6_ALLOW_RA_UPDATES 1
-#endif
-
-/**
- * LWIP_ND6_TCP_REACHABILITY_HINTS==1: Allow TCP to provide Neighbor Discovery
- * with reachability hints for connected destinations. This helps avoid sending
- * unicast neighbor solicitation messages.
- */
-#if !defined LWIP_ND6_TCP_REACHABILITY_HINTS || defined __DOXYGEN__
-#define LWIP_ND6_TCP_REACHABILITY_HINTS 1
-#endif
-
-/**
- * LWIP_ND6_RDNSS_MAX_DNS_SERVERS > 0: Use IPv6 Router Advertisement Recursive
- * DNS Server Option (as per RFC 6106) to copy a defined maximum number of DNS
- * servers to the DNS module.
- */
-#if !defined LWIP_ND6_RDNSS_MAX_DNS_SERVERS || defined __DOXYGEN__
-#define LWIP_ND6_RDNSS_MAX_DNS_SERVERS 0
-#endif
-/**
- * @}
- */
-
-/**
- * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful address autoconfiguration.
- */
-#if !defined LWIP_IPV6_DHCP6 || defined __DOXYGEN__
-#define LWIP_IPV6_DHCP6 0
-#endif
-
-/*
- ---------------------------------------
- ---------- Hook options ---------------
- ---------------------------------------
-*/
-
-/**
- * @defgroup lwip_opts_hooks Hooks
- * @ingroup lwip_opts_infrastructure
- * Hooks are undefined by default, define them to a function if you need them.
- * @{
- */
-
-/**
- * LWIP_HOOK_FILENAME: Custom filename to #include in files that provide hooks.
- * Declare your hook function prototypes in there, you may also #include all headers
- * providing data types that are need in this file.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_FILENAME "path/to/my/lwip_hooks.h"
-#endif
-
-/**
- * LWIP_HOOK_TCP_ISN:
- * Hook for generation of the Initial Sequence Number (ISN) for a new TCP
- * connection. The default lwIP ISN generation algorithm is very basic and may
- * allow for TCP spoofing attacks. This hook provides the means to implement
- * the standardized ISN generation algorithm from RFC 6528 (see contrib/adons/tcp_isn),
- * or any other desired algorithm as a replacement.
- * Called from tcp_connect() and tcp_listen_input() when an ISN is needed for
- * a new TCP connection, if TCP support (@ref LWIP_TCP) is enabled.\n
- * Signature: u32_t my_hook_tcp_isn(const ip_addr_t* local_ip, u16_t local_port, const ip_addr_t* remote_ip, u16_t remote_port);
- * - it may be necessary to use "struct ip_addr" (ip4_addr, ip6_addr) instead of "ip_addr_t" in function declarations\n
- * Arguments:
- * - local_ip: pointer to the local IP address of the connection
- * - local_port: local port number of the connection (host-byte order)
- * - remote_ip: pointer to the remote IP address of the connection
- * - remote_port: remote port number of the connection (host-byte order)\n
- * Return value:
- * - the 32-bit Initial Sequence Number to use for the new TCP connection.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_TCP_ISN(local_ip, local_port, remote_ip, remote_port)
-#endif
-
-/**
- * LWIP_HOOK_IP4_INPUT(pbuf, input_netif):
- * - called from ip_input() (IPv4)
- * - pbuf: received struct pbuf passed to ip_input()
- * - input_netif: struct netif on which the packet has been received
- * Return values:
- * - 0: Hook has not consumed the packet, packet is processed as normal
- * - != 0: Hook has consumed the packet.
- * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook
- * (i.e. free it when done).
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_IP4_INPUT(pbuf, input_netif)
-#endif
-
-/**
- * LWIP_HOOK_IP4_ROUTE(dest):
- * - called from ip_route() (IPv4)
- * - dest: destination IPv4 address
- * Returns the destination netif or NULL if no destination netif is found. In
- * that case, ip_route() continues as normal.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_IP4_ROUTE()
-#endif
-
-/**
- * LWIP_HOOK_IP4_ROUTE_SRC(dest, src):
- * - source-based routing for IPv4 (see LWIP_HOOK_IP4_ROUTE(), src may be NULL)
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_IP4_ROUTE_SRC(dest, src)
-#endif
-
-/**
- * LWIP_HOOK_ETHARP_GET_GW(netif, dest):
- * - called from etharp_output() (IPv4)
- * - netif: the netif used for sending
- * - dest: the destination IPv4 address
- * Returns the IPv4 address of the gateway to handle the specified destination
- * IPv4 address. If NULL is returned, the netif's default gateway is used.
- * The returned address MUST be directly reachable on the specified netif!
- * This function is meant to implement advanced IPv4 routing together with
- * LWIP_HOOK_IP4_ROUTE(). The actual routing/gateway table implementation is
- * not part of lwIP but can e.g. be hidden in the netif's state argument.
-*/
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_ETHARP_GET_GW(netif, dest)
-#endif
-
-/**
- * LWIP_HOOK_IP6_INPUT(pbuf, input_netif):
- * - called from ip6_input() (IPv6)
- * - pbuf: received struct pbuf passed to ip6_input()
- * - input_netif: struct netif on which the packet has been received
- * Return values:
- * - 0: Hook has not consumed the packet, packet is processed as normal
- * - != 0: Hook has consumed the packet.
- * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook
- * (i.e. free it when done).
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_IP6_INPUT(pbuf, input_netif)
-#endif
-
-/**
- * LWIP_HOOK_IP6_ROUTE(src, dest):
- * - called from ip6_route() (IPv6)
- * - src: sourc IPv6 address
- * - dest: destination IPv6 address
- * Returns the destination netif or NULL if no destination netif is found. In
- * that case, ip6_route() continues as normal.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_IP6_ROUTE(src, dest)
-#endif
-
-/**
- * LWIP_HOOK_ND6_GET_GW(netif, dest):
- * - called from nd6_get_next_hop_entry() (IPv6)
- * - netif: the netif used for sending
- * - dest: the destination IPv6 address
- * Returns the IPv6 address of the next hop to handle the specified destination
- * IPv6 address. If NULL is returned, a NDP-discovered router is used instead.
- * The returned address MUST be directly reachable on the specified netif!
- * This function is meant to implement advanced IPv6 routing together with
- * LWIP_HOOK_IP6_ROUTE(). The actual routing/gateway table implementation is
- * not part of lwIP but can e.g. be hidden in the netif's state argument.
-*/
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_ND6_GET_GW(netif, dest)
-#endif
-
-/**
- * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr):
- * - called from ethernet_input() if VLAN support is enabled
- * - netif: struct netif on which the packet has been received
- * - eth_hdr: struct eth_hdr of the packet
- * - vlan_hdr: struct eth_vlan_hdr of the packet
- * Return values:
- * - 0: Packet must be dropped.
- * - != 0: Packet must be accepted.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr)
-#endif
-
-/**
- * LWIP_HOOK_VLAN_SET:
- * Hook can be used to set prio_vid field of vlan_hdr. If you need to store data
- * on per-netif basis to implement this callback, see @ref netif_cd.
- * Called from ethernet_output() if VLAN support (@ref ETHARP_SUPPORT_VLAN) is enabled.\n
- * Signature: s32_t my_hook_vlan_set(struct netif* netif, struct pbuf* pbuf, const struct eth_addr* src, const struct eth_addr* dst, u16_t eth_type);\n
- * Arguments:
- * - netif: struct netif that the packet will be sent through
- * - p: struct pbuf packet to be sent
- * - src: source eth address
- * - dst: destination eth address
- * - eth_type: ethernet type to packet to be sent\n
- *
- *
- * Return values:
- * - &lt;0: Packet shall not contain VLAN header.
- * - 0 &lt;= return value &lt;= 0xFFFF: Packet shall contain VLAN header. Return value is prio_vid in host byte order.
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type)
-#endif
-
-/**
- * LWIP_HOOK_MEMP_AVAILABLE(memp_t_type):
- * - called from memp_free() when a memp pool was empty and an item is now available
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_MEMP_AVAILABLE(memp_t_type)
-#endif
-
-/**
- * LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif):
- * Called from ethernet_input() when an unknown eth type is encountered.
- * Return ERR_OK if packet is accepted, any error code otherwise.
- * Payload points to ethernet header!
- */
-#ifdef __DOXYGEN__
-#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif)
-#endif
-/**
- * @}
- */
-
-/*
- ---------------------------------------
- ---------- Debugging options ----------
- ---------------------------------------
-*/
-/**
- * @defgroup lwip_opts_debugmsg Debug messages
- * @ingroup lwip_opts_debug
- * @{
- */
-/**
- * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is
- * compared against this value. If it is smaller, then debugging
- * messages are written.
- * @see debugging_levels
- */
-#if !defined LWIP_DBG_MIN_LEVEL || defined __DOXYGEN__
-#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL
-#endif
-
-/**
- * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable
- * debug messages of certain types.
- * @see debugging_levels
- */
-#if !defined LWIP_DBG_TYPES_ON || defined __DOXYGEN__
-#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
-#endif
-
-/**
- * ETHARP_DEBUG: Enable debugging in etharp.c.
- */
-#if !defined ETHARP_DEBUG || defined __DOXYGEN__
-#define ETHARP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * NETIF_DEBUG: Enable debugging in netif.c.
- */
-#if !defined NETIF_DEBUG || defined __DOXYGEN__
-#define NETIF_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * PBUF_DEBUG: Enable debugging in pbuf.c.
- */
-#if !defined PBUF_DEBUG || defined __DOXYGEN__
-#define PBUF_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * API_LIB_DEBUG: Enable debugging in api_lib.c.
- */
-#if !defined API_LIB_DEBUG || defined __DOXYGEN__
-#define API_LIB_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * API_MSG_DEBUG: Enable debugging in api_msg.c.
- */
-#if !defined API_MSG_DEBUG || defined __DOXYGEN__
-#define API_MSG_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * SOCKETS_DEBUG: Enable debugging in sockets.c.
- */
-#if !defined SOCKETS_DEBUG || defined __DOXYGEN__
-#define SOCKETS_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * ICMP_DEBUG: Enable debugging in icmp.c.
- */
-#if !defined ICMP_DEBUG || defined __DOXYGEN__
-#define ICMP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * IGMP_DEBUG: Enable debugging in igmp.c.
- */
-#if !defined IGMP_DEBUG || defined __DOXYGEN__
-#define IGMP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * INET_DEBUG: Enable debugging in inet.c.
- */
-#if !defined INET_DEBUG || defined __DOXYGEN__
-#define INET_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * IP_DEBUG: Enable debugging for IP.
- */
-#if !defined IP_DEBUG || defined __DOXYGEN__
-#define IP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass.
- */
-#if !defined IP_REASS_DEBUG || defined __DOXYGEN__
-#define IP_REASS_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * RAW_DEBUG: Enable debugging in raw.c.
- */
-#if !defined RAW_DEBUG || defined __DOXYGEN__
-#define RAW_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * MEM_DEBUG: Enable debugging in mem.c.
- */
-#if !defined MEM_DEBUG || defined __DOXYGEN__
-#define MEM_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * MEMP_DEBUG: Enable debugging in memp.c.
- */
-#if !defined MEMP_DEBUG || defined __DOXYGEN__
-#define MEMP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * SYS_DEBUG: Enable debugging in sys.c.
- */
-#if !defined SYS_DEBUG || defined __DOXYGEN__
-#define SYS_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TIMERS_DEBUG: Enable debugging in timers.c.
- */
-#if !defined TIMERS_DEBUG || defined __DOXYGEN__
-#define TIMERS_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_DEBUG: Enable debugging for TCP.
- */
-#if !defined TCP_DEBUG || defined __DOXYGEN__
-#define TCP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug.
- */
-#if !defined TCP_INPUT_DEBUG || defined __DOXYGEN__
-#define TCP_INPUT_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit.
- */
-#if !defined TCP_FR_DEBUG || defined __DOXYGEN__
-#define TCP_FR_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit
- * timeout.
- */
-#if !defined TCP_RTO_DEBUG || defined __DOXYGEN__
-#define TCP_RTO_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_CWND_DEBUG: Enable debugging for TCP congestion window.
- */
-#if !defined TCP_CWND_DEBUG || defined __DOXYGEN__
-#define TCP_CWND_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating.
- */
-#if !defined TCP_WND_DEBUG || defined __DOXYGEN__
-#define TCP_WND_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions.
- */
-#if !defined TCP_OUTPUT_DEBUG || defined __DOXYGEN__
-#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_RST_DEBUG: Enable debugging for TCP with the RST message.
- */
-#if !defined TCP_RST_DEBUG || defined __DOXYGEN__
-#define TCP_RST_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths.
- */
-#if !defined TCP_QLEN_DEBUG || defined __DOXYGEN__
-#define TCP_QLEN_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * UDP_DEBUG: Enable debugging in UDP.
- */
-#if !defined UDP_DEBUG || defined __DOXYGEN__
-#define UDP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TCPIP_DEBUG: Enable debugging in tcpip.c.
- */
-#if !defined TCPIP_DEBUG || defined __DOXYGEN__
-#define TCPIP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * SLIP_DEBUG: Enable debugging in slipif.c.
- */
-#if !defined SLIP_DEBUG || defined __DOXYGEN__
-#define SLIP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * DHCP_DEBUG: Enable debugging in dhcp.c.
- */
-#if !defined DHCP_DEBUG || defined __DOXYGEN__
-#define DHCP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * AUTOIP_DEBUG: Enable debugging in autoip.c.
- */
-#if !defined AUTOIP_DEBUG || defined __DOXYGEN__
-#define AUTOIP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * DNS_DEBUG: Enable debugging for DNS.
- */
-#if !defined DNS_DEBUG || defined __DOXYGEN__
-#define DNS_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * IP6_DEBUG: Enable debugging for IPv6.
- */
-#if !defined IP6_DEBUG || defined __DOXYGEN__
-#define IP6_DEBUG LWIP_DBG_OFF
-#endif
-/**
- * @}
- */
-
-/*
- --------------------------------------------------
- ---------- Performance tracking options ----------
- --------------------------------------------------
-*/
-/**
- * @defgroup lwip_opts_perf Performance
- * @ingroup lwip_opts_debug
- * @{
- */
-/**
- * LWIP_PERF: Enable performance testing for lwIP
- * (if enabled, arch/perf.h is included)
- */
-#if !defined LWIP_PERF || defined __DOXYGEN__
-#define LWIP_PERF 0
-#endif
-/**
- * @}
- */
-
-#endif /* LWIP_HDR_OPT_H */
diff --git a/stacks/lwip_stack/release/lwip_helper_files/include/sys.h b/stacks/lwip_stack/release/lwip_helper_files/include/sys.h
deleted file mode 100644
index 8eed041..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/include/sys.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/**
- * @file
- * OS abstraction layer
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- */
-
-#ifndef LWIP_HDR_SYS_H
-#define LWIP_HDR_SYS_H
-
-#include "lwip/opt.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if NO_SYS
-
-/* For a totally minimal and standalone system, we provide null
- definitions of the sys_ functions. */
- typedef u8_t sys_sem_t;
- typedef u8_t sys_mutex_t;
- typedef u8_t sys_mbox_t;
-
-#define sys_sem_new(s, c) ERR_OK
-#define sys_sem_signal(s)
-#define sys_sem_wait(s)
-#define sys_arch_sem_wait(s,t)
-#define sys_sem_free(s)
-#define sys_sem_valid(s) 0
-#define sys_sem_valid_val(s) 0
-#define sys_sem_set_invalid(s)
-#define sys_sem_set_invalid_val(s)
-#define sys_mutex_new(mu) ERR_OK
-#define sys_mutex_lock(mu)
-#define sys_mutex_unlock(mu)
-#define sys_mutex_free(mu)
-#define sys_mutex_valid(mu) 0
-#define sys_mutex_set_invalid(mu)
-#define sys_mbox_new(m, s) ERR_OK
-#define sys_mbox_fetch(m,d)
-#define sys_mbox_tryfetch(m,d)
-#define sys_mbox_post(m,d)
-#define sys_mbox_trypost(m,d)
-#define sys_mbox_free(m)
-#define sys_mbox_valid(m)
-#define sys_mbox_valid_val(m)
-#define sys_mbox_set_invalid(m)
-#define sys_mbox_set_invalid_val(m)
-
-#define sys_thread_new(n,t,a,s,p)
-
-#define sys_msleep(t)
-
-#else /* NO_SYS */
-
-/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */
-#define SYS_ARCH_TIMEOUT 0xffffffffUL
-
-/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate.
- * For now we use the same magic value, but we allow this to change in future.
- */
-#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
-
-#include "lwip/err.h"
-#include "arch/sys_arch.h"
-
-/** Function prototype for thread functions */
- typedef void (*lwip_thread_fn) (void *arg);
-
-/* Function prototypes for functions to be implemented by platform ports
- (in sys_arch.c) */
-
-/* Mutex functions: */
-
-/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
- should be used instead */
-#ifndef LWIP_COMPAT_MUTEX
-#define LWIP_COMPAT_MUTEX 0
-#endif
-
-#if LWIP_COMPAT_MUTEX
-/* for old ports that don't have mutexes: define them to binary semaphores */
-#define sys_mutex_t sys_sem_t
-#define sys_mutex_new(mutex) sys_sem_new(mutex, 1)
-#define sys_mutex_lock(mutex) sys_sem_wait(mutex)
-#define sys_mutex_unlock(mutex) sys_sem_signal(mutex)
-#define sys_mutex_free(mutex) sys_sem_free(mutex)
-#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
-#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
-
-#else /* LWIP_COMPAT_MUTEX */
-
-/**
- * @ingroup sys_mutex
- * Create a new mutex.
- * Note that mutexes are expected to not be taken recursively by the lwIP code,
- * so both implementation types (recursive or non-recursive) should work.
- * @param mutex pointer to the mutex to create
- * @return ERR_OK if successful, another err_t otherwise
- */
- err_t sys_mutex_new (sys_mutex_t * mutex);
-/**
- * @ingroup sys_mutex
- * Lock a mutex
- * @param mutex the mutex to lock
- */
- void sys_mutex_lock (sys_mutex_t * mutex);
-/**
- * @ingroup sys_mutex
- * Unlock a mutex
- * @param mutex the mutex to unlock
- */
- void sys_mutex_unlock (sys_mutex_t * mutex);
-/**
- * @ingroup sys_mutex
- * Delete a semaphore
- * @param mutex the mutex to delete
- */
- void sys_mutex_free (sys_mutex_t * mutex);
-#ifndef sys_mutex_valid
-/**
- * @ingroup sys_mutex
- * Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid
- */
- int sys_mutex_valid (sys_mutex_t * mutex);
-#endif
-#ifndef sys_mutex_set_invalid
-/**
- * @ingroup sys_mutex
- * Set a mutex invalid so that sys_mutex_valid returns 0
- */
- void sys_mutex_set_invalid (sys_mutex_t * mutex);
-#endif
-#endif /* LWIP_COMPAT_MUTEX */
-
-/* Semaphore functions: */
-
-/**
- * @ingroup sys_sem
- * Create a new semaphore
- * @param sem pointer to the semaphore to create
- * @param count initial count of the semaphore
- * @return ERR_OK if successful, another err_t otherwise
- */
- err_t sys_sem_new (sys_sem_t * sem, u8_t count);
-/**
- * @ingroup sys_sem
- * Signals a semaphore
- * @param sem the semaphore to signal
- */
- void sys_sem_signal (sys_sem_t * sem);
-/**
- * @ingroup sys_sem
- * Wait for a semaphore for the specified timeout
- * @param sem the semaphore to wait for
- * @param timeout timeout in milliseconds to wait (0 = wait forever)
- * @return time (in milliseconds) waited for the semaphore
- * or SYS_ARCH_TIMEOUT on timeout
- */
- u32_t sys_arch_sem_wait (sys_sem_t * sem, u32_t timeout);
-/**
- * @ingroup sys_sem
- * Delete a semaphore
- * @param sem semaphore to delete
- */
- void sys_sem_free (sys_sem_t * sem);
-/** Wait for a semaphore - forever/no timeout */
-#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0)
-#ifndef sys_sem_valid
-/**
- * @ingroup sys_sem
- * Check if a semaphore is valid/allocated: return 1 for valid, 0 for invalid
- */
- int sys_sem_valid (sys_sem_t * sem);
-#endif
-#ifndef sys_sem_set_invalid
-/**
- * @ingroup sys_sem
- * Set a semaphore invalid so that sys_sem_valid returns 0
- */
- void sys_sem_set_invalid (sys_sem_t * sem);
-#endif
-#ifndef sys_sem_valid_val
-/**
- * Same as sys_sem_valid() but taking a value, not a pointer
- */
-#define sys_sem_valid_val(sem) sys_sem_valid(&(sem))
-#endif
-#ifndef sys_sem_set_invalid_val
-/**
- * Same as sys_sem_set_invalid() but taking a value, not a pointer
- */
-#define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem))
-#endif
-
-#ifndef sys_msleep
-/**
- * @ingroup sys_misc
- * Sleep for specified number of ms
- */
- void sys_msleep (u32_t ms); /* only has a (close to) 1 ms resolution. */
-#endif
-
-/* Mailbox functions. */
-
-/**
- * @ingroup sys_mbox
- * Create a new mbox of specified size
- * @param mbox pointer to the mbox to create
- * @param size (minimum) number of messages in this mbox
- * @return ERR_OK if successful, another err_t otherwise
- */
- err_t sys_mbox_new (sys_mbox_t * mbox, int size);
-/**
- * @ingroup sys_mbox
- * Post a message to an mbox - may not fail
- * -> blocks if full, only used from tasks not from ISR
- * @param mbox mbox to posts the message
- * @param msg message to post (ATTENTION: can be NULL)
- */
- void sys_mbox_post (sys_mbox_t * mbox, void *msg);
-/**
- * @ingroup sys_mbox
- * Try to post a message to an mbox - may fail if full or ISR
- * @param mbox mbox to posts the message
- * @param msg message to post (ATTENTION: can be NULL)
- */
- err_t sys_mbox_trypost (sys_mbox_t * mbox, void *msg);
-/**
- * @ingroup sys_mbox
- * Wait for a new message to arrive in the mbox
- * @param mbox mbox to get a message from
- * @param msg pointer where the message is stored
- * @param timeout maximum time (in milliseconds) to wait for a message (0 = wait forever)
- * @return time (in milliseconds) waited for a message, may be 0 if not waited
- or SYS_ARCH_TIMEOUT on timeout
- * The returned time has to be accurate to prevent timer jitter!
- */
- u32_t sys_arch_mbox_fetch (sys_mbox_t * mbox, void **msg, u32_t timeout);
-/* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */
-#ifndef sys_arch_mbox_tryfetch
-/**
- * @ingroup sys_mbox
- * Wait for a new message to arrive in the mbox
- * @param mbox mbox to get a message from
- * @param msg pointer where the message is stored
- * @return 0 (milliseconds) if a message has been received
- * or SYS_MBOX_EMPTY if the mailbox is empty
- */
- u32_t sys_arch_mbox_tryfetch (sys_mbox_t * mbox, void **msg);
-#endif
-/**
- * For now, we map straight to sys_arch implementation.
- */
-#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
-/**
- * @ingroup sys_mbox
- * Delete an mbox
- * @param mbox mbox to delete
- */
- void sys_mbox_free (sys_mbox_t * mbox);
-#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)
-#ifndef sys_mbox_valid
-/**
- * @ingroup sys_mbox
- * Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid
- */
- int sys_mbox_valid (sys_mbox_t * mbox);
-#endif
-#ifndef sys_mbox_set_invalid
-/**
- * @ingroup sys_mbox
- * Set an mbox invalid so that sys_mbox_valid returns 0
- */
- void sys_mbox_set_invalid (sys_mbox_t * mbox);
-#endif
-#ifndef sys_mbox_valid_val
-/**
- * Same as sys_mbox_valid() but taking a value, not a pointer
- */
-#define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox))
-#endif
-#ifndef sys_mbox_set_invalid_val
-/**
- * Same as sys_mbox_set_invalid() but taking a value, not a pointer
- */
-#define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox))
-#endif
-
-/**
- * @ingroup sys_misc
- * The only thread function:
- * Creates a new thread
- * ATTENTION: although this function returns a value, it MUST NOT FAIL (ports have to assert this!)
- * @param name human-readable name for the thread (used for debugging purposes)
- * @param thread thread-function
- * @param arg parameter passed to 'thread'
- * @param stacksize stack size in bytes for the new thread (may be ignored by ports)
- * @param prio priority of the new thread (may be ignored by ports) */
- sys_thread_t sys_thread_new (const char *name, lwip_thread_fn thread,
- void *arg, int stacksize, int prio);
-
-#endif /* NO_SYS */
-
-/* sys_init() must be called before anything else. */
- void sys_init (void);
-
-#ifndef sys_jiffies
-/**
- * Ticks/jiffies since power up.
- */
- u32_t sys_jiffies (void);
-#endif
-
-/**
- * @ingroup sys_time
- * Returns the current time in milliseconds,
- * may be the same as sys_jiffies or at least based on it.
- */
- u32_t sys_now (void);
-
-/* Critical Region Protection */
-/* These functions must be implemented in the sys_arch.c file.
- In some implementations they can provide a more light-weight protection
- mechanism than using semaphores. Otherwise semaphores can be used for
- implementation */
-#ifndef SYS_ARCH_PROTECT
-/** SYS_LIGHTWEIGHT_PROT
- * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
- * for certain critical regions during buffer allocation, deallocation and memory
- * allocation and deallocation.
- */
-#if SYS_LIGHTWEIGHT_PROT
-
-/**
- * @ingroup sys_prot
- * SYS_ARCH_DECL_PROTECT
- * declare a protection variable. This macro will default to defining a variable of
- * type sys_prot_t. If a particular port needs a different implementation, then
- * this macro may be defined in sys_arch.h.
- */
-#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
-/**
- * @ingroup sys_prot
- * SYS_ARCH_PROTECT
- * Perform a "fast" protect. This could be implemented by
- * disabling interrupts for an embedded system or by using a semaphore or
- * mutex. The implementation should allow calling SYS_ARCH_PROTECT when
- * already protected. The old protection level is returned in the variable
- * "lev". This macro will default to calling the sys_arch_protect() function
- * which should be implemented in sys_arch.c. If a particular port needs a
- * different implementation, then this macro may be defined in sys_arch.h
- */
-#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
-/**
- * @ingroup sys_prot
- * SYS_ARCH_UNPROTECT
- * Perform a "fast" set of the protection level to "lev". This could be
- * implemented by setting the interrupt level to "lev" within the MACRO or by
- * using a semaphore or mutex. This macro will default to calling the
- * sys_arch_unprotect() function which should be implemented in
- * sys_arch.c. If a particular port needs a different implementation, then
- * this macro may be defined in sys_arch.h
- */
-#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
- sys_prot_t sys_arch_protect (void);
- void sys_arch_unprotect (sys_prot_t pval);
-
-#else
-
-#define SYS_ARCH_DECL_PROTECT(lev)
-#define SYS_ARCH_PROTECT(lev)
-#define SYS_ARCH_UNPROTECT(lev)
-
-#endif /* SYS_LIGHTWEIGHT_PROT */
-
-#endif /* SYS_ARCH_PROTECT */
-
-/*
- * Macros to set/get and increase/decrease variables in a thread-safe way.
- * Use these for accessing variable that are used from more than one thread.
- */
-
-#ifndef SYS_ARCH_INC
-#define SYS_ARCH_INC(var, val) do { \
- SYS_ARCH_DECL_PROTECT(old_level); \
- SYS_ARCH_PROTECT(old_level); \
- var += val; \
- SYS_ARCH_UNPROTECT(old_level); \
- } while(0)
-#endif /* SYS_ARCH_INC */
-
-#ifndef SYS_ARCH_DEC
-#define SYS_ARCH_DEC(var, val) do { \
- SYS_ARCH_DECL_PROTECT(old_level); \
- SYS_ARCH_PROTECT(old_level); \
- var -= val; \
- SYS_ARCH_UNPROTECT(old_level); \
- } while(0)
-#endif /* SYS_ARCH_DEC */
-
-#ifndef SYS_ARCH_GET
-#define SYS_ARCH_GET(var, ret) do { \
- SYS_ARCH_DECL_PROTECT(old_level); \
- SYS_ARCH_PROTECT(old_level); \
- ret = var; \
- SYS_ARCH_UNPROTECT(old_level); \
- } while(0)
-#endif /* SYS_ARCH_GET */
-
-#ifndef SYS_ARCH_SET
-#define SYS_ARCH_SET(var, val) do { \
- SYS_ARCH_DECL_PROTECT(old_level); \
- SYS_ARCH_PROTECT(old_level); \
- var = val; \
- SYS_ARCH_UNPROTECT(old_level); \
- } while(0)
-#endif /* SYS_ARCH_SET */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LWIP_HDR_SYS_H */
diff --git a/stacks/lwip_stack/release/lwip_helper_files/include/timeouts.h b/stacks/lwip_stack/release/lwip_helper_files/include/timeouts.h
deleted file mode 100644
index 005db52..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/include/timeouts.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * @file
- * Timer implementations
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- * Simon Goldschmidt
- *
- */
-#ifndef LWIP_HDR_TIMEOUTS_H
-#define LWIP_HDR_TIMEOUTS_H
-
-#include "lwip/opt.h"
-#include "lwip/err.h"
-#if !NO_SYS
-#include "lwip/sys.h"
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#ifndef LWIP_DEBUG_TIMERNAMES
-#ifdef LWIP_DEBUG
-#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG
-#else /* LWIP_DEBUG */
-#define LWIP_DEBUG_TIMERNAMES 0
-#endif /* LWIP_DEBUG */
-#endif
-
-/** Function prototype for a stack-internal timer function that has to be
- * called at a defined interval */
- typedef void (*lwip_cyclic_timer_handler) (void);
-
-/** This struct contains information about a stack-internal timer function
- that has to be called at a defined interval */
- struct lwip_cyclic_timer
- {
- u32_t interval_ms;
- lwip_cyclic_timer_handler handler;
-#if LWIP_DEBUG_TIMERNAMES
- const char *handler_name;
-#endif /* LWIP_DEBUG_TIMERNAMES */
- };
-
-/** This array contains all stack-internal cyclic timers. To get the number of
- * timers, use LWIP_ARRAYSIZE() */
- extern const struct lwip_cyclic_timer lwip_cyclic_timers[];
-
-#if LWIP_TIMERS
-
-/** Function prototype for a timeout callback function. Register such a function
- * using sys_timeout().
- *
- * @param arg Additional argument to pass to the function - set up by sys_timeout()
- */
- typedef void (*sys_timeout_handler) (void *arg);
-
- struct sys_timeo
- {
- struct sys_timeo *next;
- u32_t time;
- sys_timeout_handler h;
- void *arg;
-#if LWIP_DEBUG_TIMERNAMES
- const char *handler_name;
-#endif /* LWIP_DEBUG_TIMERNAMES */
- };
-
- void sys_timeouts_init (void);
-
-#if LWIP_DEBUG_TIMERNAMES
- void sys_timeout_debug (u32_t msecs, sys_timeout_handler handler, void *arg,
- const char *handler_name);
-#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler)
-#else /* LWIP_DEBUG_TIMERNAMES */
- void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg);
-#endif /* LWIP_DEBUG_TIMERNAMES */
-
- void sys_untimeout (sys_timeout_handler handler, void *arg);
- void sys_restart_timeouts (void);
-#if NO_SYS
- void sys_check_timeouts (void);
- u32_t sys_timeouts_sleeptime (void);
-#else /* NO_SYS */
- void sys_timeouts_mbox_fetch (sys_mbox_t * mbox, void **msg);
-#endif /* NO_SYS */
-
-#else /* LWIP_TIMERS */
- typedef void (*sys_timeout_handler) (void *arg);
-
- void sys_timeouts_init (void);
- void sys_timeout (u32_t msecs, sys_timeout_handler handler, void *arg);
- void sys_untimeout (sys_timeout_handler handler, void *arg);
- void sys_timeouts_mbox_fetch (sys_mbox_t * mbox, void **msg);
- void cyclic_timer (void *arg);
- void tcpip_tcp_timer (void *arg);
- void tcp_timer_needed (void);
-
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LWIP_HDR_TIMEOUTS_H */
diff --git a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/atomic_32.h b/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/atomic_32.h
deleted file mode 100644
index 15a058b..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/atomic_32.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * atomic_32.h
- *
- */
-
-#ifndef ATOMIC_32_H_
-#define ATOMIC_32_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
- typedef struct
- {
- volatile int counter;
- } atomic_t;
-
-#define ATOMIC_INIT(i) {(i)}
-#define atomic_read(v) (*(volatile int *)&(v)->counter)
-#define atomic_set(v, i) (((v)->counter) = (i))
-
- static inline void atomic_add (int i, atomic_t * v)
- {
- __asm__ __volatile__ (
- /*LOCK_PREFIX "addl %1,%0" */
- "addl %1,%0":"+m" (v->counter):"ir" (i));
- }
-
- static inline void atomic_sub (int i, atomic_t * v)
- {
- __asm__ __volatile__ (
- /*LOCK_PREFIX "subl %1,%0" */
- "subl %1,%0":"+m" (v->counter):"ir" (i));
- }
-
- static __inline__ void atomic_inc (atomic_t * v)
- {
- __asm__ __volatile__ (
- /*LOCK_PREFIX "incl %0" */
- "incl %0":"+m" (v->counter));
- }
-
- static __inline__ void atomic_dec (atomic_t * v)
- {
- __asm__ __volatile__ (
- /*LOCK_PREFIX "decl %0" */
- "decl %0":"+m" (v->counter));
- }
-#ifdef __cplusplus
-}
-#endif
-#endif /* ATOMIC_32_H_ */
diff --git a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/cc.h b/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/cc.h
deleted file mode 100644
index 4e21a75..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/cc.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef LWIP_ARCH_CC_H
-#define LWIP_ARCH_CC_H
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef LWIP_MAX_S16_NUM
-#define LWIP_MAX_S16_NUM ((s16_t)0x7fff)
-#endif
-
-#ifndef LWIP_MAX_U16_NUM
-#define LWIP_MAX_U16_NUM ((u16_t)0xFfff)
-#endif
-
-#ifndef LWIP_MAX_U32_NUM
-#define LWIP_MAX_U32_NUM ((u32_t)0xffffffff)
-#endif
-
-#ifndef LWIP_MAX_S32_NUM
-#define LWIP_MAX_S32_NUM ((s32_t)0x7fffffff)
-#endif
-
-#ifndef LWIP_MAX_U64_NUM
-#define LWIP_MAX_U64_NUM ((u64_t)0xffffffffffffffff)
-#endif
-
-#ifndef LWIP_MAX_S64_NUM
-#define LWIP_MAX_S64_NUM ((s64_t)0x7fffffffffffffff)
-#endif
-
-#define NONBLOCK_MODE_FOR_ALG 2 /* it is possible to get fail */
-#define BLOCK_MODE_FOR_ALG 1 /* will block till success */
-#define NONBLOCK_MODE_NOT_FOR_ALG 0
-
-typedef uint64_t u64_t;
-typedef int64_t s64_t;
-
-typedef uint32_t u32_t;
-typedef int32_t s32_t;
-
-typedef uint16_t u16_t;
-typedef int16_t s16_t;
-
-typedef uint8_t u8_t;
-typedef int8_t s8_t;
-
-typedef uintptr_t mem_ptr_t;
-
-#define PACK_STRUCT_FIELD(x) x
-#define PACK_STRUCT_STRUCT
-#define PACK_STRUCT_BEGIN
-#define PACK_STRUCT_END
-
-#define S16_F "d"
-#define U16_F "u"
-#define X16_F "x"
-
-#define S32_F "d"
-#define U32_F "u"
-#define X32_F "x"
-
-#define S64_F "ld"
-#define U64_F "lu"
-#define X64_F "x"
-
-#ifndef BYTE_ORDER
-#define BYTE_ORDER LITTLE_ENDIAN
-#endif
-
-//#define LWIP_PROVIDE_ERRNO
-
-#ifndef LWIP_PLATFORM_DIAG
-#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0)
-#endif
-#ifndef LWIP_DEBUG
-#define LWIP_DEBUG 1
-#endif
-#endif
diff --git a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/queue.h b/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/queue.h
deleted file mode 100644
index 238ef05..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/queue.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef __QUEUE_H__
-#define __QUEUE_H__
-#ifdef __cplusplus
-extern "C"
-{
-
-#endif
-#include "common_mem_base_type.h"
-#ifdef HAL_LIB
-#else
-#include "rte_ring.h"
-#endif
-#include "nsfw_mem_api.h"
-//#include "stackx_dfx_api.h"
-
-#include "sys.h"
-
- typedef struct queue
- {
- PRIMARY_ADDR mring_handle llring;
- } queue_t;
-
- err_t queue_push (queue_t * q, void *msg, int isTrypush);
- void *queue_pop (queue_t * q, u32_t * timeout, int isTryPop);
-
-#ifdef __cplusplus
-
-}
-#endif
-#endif
diff --git a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/sys_arch.h b/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/sys_arch.h
deleted file mode 100644
index 92ff049..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/sys_arch.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef STACKX_ARCH_SYS_ARCH_H
-#define STACKX_ARCH_SYS_ARCH_H
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <sys/types.h>
-#include <semaphore.h>
-
-#include "cc.h"
-
-/*add by daifen 2012.7.27*/
- typedef uint64_t sys_thread_t;
-
- extern u64_t hz_per_ms;
-
- void stackx_global_lock (void);
- void stackx_global_unlock (void);
-
-#define SYS_ARCH_PROTECT(lev) stackx_global_lock()
-#define SYS_ARCH_UNPROTECT(lev) stackx_global_unlock()
-#define SYS_ARCH_DECL_PROTECT(lev)
-
-#ifdef __cplusplus
-
-}
-#endif
-#endif
diff --git a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/win_minmax.h b/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/win_minmax.h
deleted file mode 100644
index e1e64ac..0000000
--- a/stacks/lwip_stack/release/lwip_helper_files/lwip/arch/win_minmax.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * lib/minmax.c: windowed min/max tracker by Kathleen Nichols.
- *
- */
-#ifndef MINMAX_H
-#define MINMAX_H
-
-#include "types.h"
-#include "rtp_branch_prediction.h"
-
-/* A single data point for our parameterized min-max tracker */
-struct minmax_sample
-{
- u32_t t; /* time measurement was taken */
- u32_t v; /* value measured */
-};
-
-/* State for the parameterized min-max tracker */
-struct minmax
-{
- struct minmax_sample s[3];
-};
-
-static inline u32_t
-minmax_get (const struct minmax *m)
-{
- return m->s[0].v;
-}
-
-static inline u32_t
-minmax_reset (struct minmax *m, u32_t t, u32_t meas)
-{
- struct minmax_sample val = {.t = t,.v = meas };
-
- m->s[2] = m->s[1] = m->s[0] = val;
- return m->s[0].v;
-}
-
-/* As time advances, update the 1st, 2nd, and 3rd choices. */
-static u32_t
-minmax_subwin_update (struct minmax *m, u32_t win,
- const struct minmax_sample *val)
-{
- u32_t dt = val->t - m->s[0].t;
-
- if (unlikely (dt > win))
- {
- /*
- * Passed entire window without a new val so make 2nd
- * choice the new val & 3rd choice the new 2nd choice.
- * we may have to iterate this since our 2nd choice
- * may also be outside the window (we checked on entry
- * that the third choice was in the window).
- */
- m->s[0] = m->s[1];
- m->s[1] = m->s[2];
- m->s[2] = *val;
- if (unlikely (val->t - m->s[0].t > win))
- {
- m->s[0] = m->s[1];
- m->s[1] = m->s[2];
- m->s[2] = *val;
- }
- }
- else if (unlikely (m->s[1].t == m->s[0].t) && dt > win / 4)
- {
- /*
- * We've passed a quarter of the window without a new val
- * so take a 2nd choice from the 2nd quarter of the window.
- */
- m->s[2] = m->s[1] = *val;
- }
- else if (unlikely (m->s[2].t == m->s[1].t) && dt > win / 2)
- {
- /*
- * We've passed half the window without finding a new val
- * so take a 3rd choice from the last half of the window
- */
- m->s[2] = *val;
- }
- return m->s[0].v;
-}
-
-/* Check if new measurement updates the 1st, 2nd or 3rd choice max. */
-static inline u32_t
-minmax_running_max (struct minmax *m, u32_t win, u32_t t, u32_t meas)
-{
- struct minmax_sample val = {.t = t,.v = meas };
-
- if (unlikely (val.v >= m->s[0].v) || /* found new max? */
- unlikely (val.t - m->s[2].t > win)) /* nothing left in window? */
- return minmax_reset (m, t, meas); /* forget earlier samples */
-
- if (unlikely (val.v >= m->s[1].v))
- m->s[2] = m->s[1] = val;
- else if (unlikely (val.v >= m->s[2].v))
- m->s[2] = val;
-
- return minmax_subwin_update (m, win, &val);
-}
-
-/* Check if new measurement updates the 1st, 2nd or 3rd choice min. */
-static inline u32_t
-minmax_running_min (struct minmax *m, u32_t win, u32_t t, u32_t meas)
-{
- struct minmax_sample val = {.t = t,.v = meas };
-
- if (unlikely (val.v <= m->s[0].v) || /* found new min? */
- unlikely (val.t - m->s[2].t > win)) /* nothing left in window? */
- return minmax_reset (m, t, meas); /* forget earlier samples */
-
- if (unlikely (val.v <= m->s[1].v))
- m->s[2] = m->s[1] = val;
- else if (unlikely (val.v <= m->s[2].v))
- m->s[2] = val;
-
- return minmax_subwin_update (m, win, &val);
-}
-
-#endif
diff --git a/stacks/lwip_stack/release/script/nstack_fun.sh b/stacks/lwip_stack/release/script/nstack_fun.sh
deleted file mode 100755
index df62e1e..0000000
--- a/stacks/lwip_stack/release/script/nstack_fun.sh
+++ /dev/null
@@ -1,596 +0,0 @@
-#!/bin/bash
-
-check_file_size()
-{
- if [ -n "$1" ]&&[ -f "$1" ]
- then
- local log_size=`stat -c %s $1`
- if [ ${log_size} -gt $MAX_LOG_FILE_SIZE ]
- then
- mv $1 $1.bk
- fi
- fi
-}
-
-log()
-{
- check_file_size $LOG_FILE
-
- #1 line number
- local printStr="$2"
- cur_date=`date +'%m%d %H:%M:%S.%6N' -u`
- pid=$$
- file=$0
- local log_head="I${cur_date} ${file##*/}:$1 ${pid}]"
-
- printf "${log_head} $printStr\n" >> $LOG_FILE 2>/dev/null
-}
-
-get_call_stack()
-{
- local proc_name="$1"
- log $LINENO "gdb info in call stack:"
- gdb -batch -ex "t a a bt" -p `pidof $proc_name`>> $LOG_FILE 2>/dev/null
- log $LINENO "top in call stack:"
- top -H -p `pidof $proc_name` -n 1 -b >> $LOG_FILE 2>/dev/null
- log $LINENO "mpstat in call stack:"
- mpstat -A >> $LOG_FILE 2>/dev/null
-}
-
-gdb_set()
-{
- local mod="$1"
- if [ "$mod" = "stop" ];then
- gdb -batch -ex "set g_hbt_switch=0" -p `pidof nStackMain`
- gdb -batch -ex "set g_hbt_switch=0" -p `pidof nStackMaster`
- log $LINENO "gdb stop"
- else
- gdb -batch -ex "set g_hbt_switch=1" -p `pidof nStackMain`
- gdb -batch -ex "set g_hbt_switch=1" -p `pidof nStackMaster`
- log $LINENO "gdb start"
- fi
-}
-
-get_core_mask()
-{
- local sys_core=`cat /proc/cpuinfo | grep processor | wc -l`
- log $LINENO "system has ${sys_core} cores"
- #if sys_core too large 2^$sys_core will overflow; so reset sys_core; z00203440 20170323
- if [ $sys_core -gt 8 ]
- then
- sys_core=8
- log $LINENO "sys_core too large reset to ${sys_core}"
- fi
-
- base=`echo | awk -v ex=$sys_core 'BEGIN{a=2^ex; print a}'`
- local temp=`expr $base - 1`
- printf %X $temp
- return $sys_core
-}
-
-init_log_file()
-{
- if [ -n $LOG_FILE_DIR ]&&[ ! -f $LOG_FILE_DIR ]
- then
- sudo mkdir -p $LOG_FILE_DIR
- fi
-
- check_file_size $LOG_FILE
-
- if [ -n $DPDK_FILE_DIR ]&&[ ! -f $DPDK_FILE_DIR ]
- then
- sudo mkdir -p $DPDK_FILE_DIR
- fi
-
- check_file_size $DPDK_FILE
-
- #must create the directory under the current user account
- if [ -n $RUNTIME_DIR ]&&[ ! -f $RUNTIME_DIR ]
- then
- mkdir -p $RUNTIME_DIR
- fi
-}
-
-delete_log_file() {
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $RUNNING_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${RUNNING_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $OPERATION_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${OPERATION_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $GLOG_FAILURE_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${GLOG_FAILURE_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $NSTACK_FAILURE_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${NSTACK_FAILURE_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $MASTER_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${MASTER_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $GLOG_FAILURE_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${GLOG_FAILURE_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $NSTACK_FAILURE_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${NSTACK_FAILURE_FILE_NAME}*
- fi
- if [ -n $LOG_FILE_DIR ]&&[ -d $LOG_FILE_DIR ]&&[ -n $LOG_FILE_NAME ]; then
- rm -rf $LOG_FILE_DIR/*${LOG_FILE_NAME}*
- fi
- if [ -n $DPDK_FILE_DIR ]&&[ -d $DPDK_FILE_DIR ]&&[ -n $DPDK_FILE_NAME ]; then
- rm -rf $DPDK_FILE_DIR/*${DPDK_FILE_NAME}*
- fi
- if [ -n $RUNTIME_DIR ]&&[ -d $RUNTIME_DIR ]; then
- rm -rf $RUNTIME_DIR
- fi
- if [ -n ${MASTER_EXEC_PATH} ]&&[ -d $MASTER_EXEC_PATH ]; then
- rm -rf $MASTER_EXEC_PATH
- fi
-}
-
-init_hugepage()
-{
- log $LINENO "init hugepage..."
-##############################################################
-#
-# TO DO:
-# verify the free pages carefully, but not with 1G pagesize
-#
-#############################################################
-
- #for 1G hugepage
-
- # check total hugepage number
-# local nr_pagedir=/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
-# if [ ! -f ${nr_pagedir} ]
-# then
-# log $LINENO "system not support 1G huge pages, exit!"
-# exit 1
-# fi
-
- # local nr_huge_pages=`cat ${nr_pagedir}`
- # if [ ${nr_huge_pages} -lt 3 ]
- # then
- # log $LINENO "total huge pages is not set correctly, current ${nr_huge_pages}, exit!"
- # exit 1
- # fi
-
- # check free hugepage number
- # local fr_pagedir=/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages
- # if [ ! -f ${fr_pagedir} ]
- # then
- # log $LINENO "system not support 1G huge pages, exit!"
- # exit 1
- # fi
-
- # local fr_huge_pages=`cat ${fr_pagedir}`
- # if [ ${fr_huge_pages} -lt 3 ]
- # then
- # log $LINENO "free huge pages is not set correctly, current ${fr_huge_pages}, exit!"
- # lsof $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # exit 1
- # fi
-
- # mount | grep $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # if [ $? -eq 0 ] ; then
- # log $LINENO "$HUGE_DIR dir exist"
- # if test $(pgrep -f $1 | wc -l) -eq 0 ; then
- # log $LINENO "proccess $1 not exist and clean huge files"
- # if [ -n $HUGE_DIR ]&&[ -d $HUGE_DIR ]; then
- # rm -rf $HUGE_DIR/*
- # fi
- # else
- # log $LINENO "proccess $1 exist"
- # fi
- # else
- # log $LINENO "$HUGE_DIR not exist and create"
- # sudo mkdir -p $HUGE_DIR
- #directory right can't larger than 750
-
- # cur_user=`whoami`
- # if [ "root" != "$cur_user" ]
- # then
- # non_root_uid=`id -u $cur_user`
- # non_root_gid=`id -g $cur_user`
- # sudo mount -t hugetlbfs -o pagesize=1G,uid=$non_root_uid,gid=$non_root_gid none $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # else
- # mount -t hugetlbfs -o pagesize=1G none $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # fi
- # fi
-}
-
-recover_hugepage()
-{
- log $LINENO "recover hugepage..."
-
- if [ -n "$HUGE_DIR" ]&&[ -d "$HUGE_DIR" ]; then
- rm -rf $HUGE_DIR/*
- fi
-}
-
-init_network()
-{
- log $LINENO "init network..."
-
- recover_network
-
- sudo modprobe uio
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local is_igb_uio_loaded=`lsmod | grep igb_uio | wc -l`
- if [ ${is_igb_uio_loaded} -eq 0 ]
- then
- log $LINENO "igb_uio is not installed. install it now."
- sudo insmod $DPDK_MOD_PATH/igb_uio.ko
- fi
-
- # check if there is un-recognized nic
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py -s | grep -A32 "Other network" | \
- grep unused | awk -F"'" '{print $1, $2}' | while read NIC_BFS BIND_DRIVER_NAME
- do
- local TYPE_CHECK_ixgbe=`echo $BIND_DRIVER_NAME |grep "82599ES 10-Gigabit SFI/SFP+ Network Connection"|wc -l`
- local TYPE_CHECK_ixgbevf=`echo $BIND_DRIVER_NAME |grep "82599 Ethernet Controller Virtual Function"|wc -l`
- local TYPE_CHECK_vmxnet3=`echo $BIND_DRIVER_NAME |grep "VMXNET3 Ethernet Controller"|wc -l`
- local TYPE_CHECK_virtio=`echo $BIND_DRIVER_NAME |grep "Virtio network device"|wc -l`
-
- if [ $TYPE_CHECK_ixgbe -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=ixgbe $NIC_BFS
- elif [ $TYPE_CHECK_ixgbevf -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=ixgbevf $NIC_BFS
- elif [ $TYPE_CHECK_vmxnet3 -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=vmxnet3 $NIC_BFS
- elif [ $TYPE_CHECK_virtio -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=virtio-pci $NIC_BFS
- fi
-
- done
-}
-
-recover_network()
-{
- log $LINENO "recover network..."
-
- if [ -z "$DPDK_NIC_LIST_FILE" ]||[ ! -f "$DPDK_NIC_LIST_FILE" ]
- then
- log $LINENO "$DPDK_NIC_LIST_FILE is not exist. There is no nic used by nstack to unbind."
- else
- log $LINENO "The NIC(s) to unbind: "
- cat $DPDK_NIC_LIST_FILE | awk -F" '|' | drv=| unused=" '{print $1,$4}' >> $LOG_FILE 2>/dev/null
- cat $DPDK_NIC_LIST_FILE | awk -F" '|' | drv=| unused=" '{print $1,$4}' | while read NIC_BFS BIND_DRIVER_TYPE
- do
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=$BIND_DRIVER_TYPE $NIC_BFS >> $LOG_FILE 2>/dev/null
- done
- rm $DPDK_NIC_LIST_FILE
- fi
-
- touch $DPDK_NIC_LIST_FILE
- chmod 600 $DPDK_NIC_LIST_FILE
-}
-
-
-check_args_main()
-{
-if [ -z $HUGE_DIR ]||[ -z $MEM_SIZE ]||[ -z $RTP_CORE_MASK ]||[ -z $SLEEP_INTERVAL ]||\
- [ -z $BIND_CPU ]||[ -z $START_TYPE ]
-then
- log $LINENO "nStackMain Args is null"
- return 1
-fi
-
-# check CORE_MASK -- see in get_core_mask()
-# check HUGE_DIR
-if [ -z $HUGE_DIR ]||[ ! -d $HUGE_DIR ]; then
- log $LINENO "HUGE_DIR="$HUGE_DIR" is invalid"
- return 1
-fi
-
-# check MEM_SIZE
-if [ $MEM_SIZE -lt 2048 ]||[ $MEM_SIZE -gt 32768 ]; then
- log $LINENO "MEM_SIZE="$MEM_SIZE" is invalid"
- return 1
-fi
-
-# check RTP_CORE_MASK
-if [ $RTP_CORE_MASK -lt 1 ]; then
- log $LINENO "RTP_CORE_MASK="$RTP_CORE_MASK" is invalid"
- return 1
-fi
-
-# check SLEEP_INTERVAL
-if [ $SLEEP_INTERVAL -lt 0 ]; then
- log $LINENO "SLEEP_INTERVAL="$SLEEP_INTERVAL" is invalid"
- return 1
-fi
-
-# check BIND_CPU
-if [ $BIND_CPU -lt 0 ]; then
- log $LINENO "BIND_CPU="$BIND_CPU" is invalid"
- return 1
-fi
-
-# check START_TYPE
-if [ $START_TYPE -lt 0 ]||[ $START_TYPE -gt 5 ]; then
- log $LINENO "START_TYPE="$START_TYPE" is invalid"
- return 1
-fi
-
-return 0
-}
-
-run_nStackMain()
-{
-
- log $LINENO "run nstack main..."
-
- sudo setcap CAP_IPC_OWNER,CAP_FOWNER,CAP_NET_ADMIN,CAP_IPC_LOCK,CAP_NET_RAW,CAP_SYS_RAWIO,CAP_SYS_ADMIN,CAP_CHOWN,CAP_SYS_NICE=eip ./bin/nStackMain 2>/dev/null
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- export NSTACK_CONFIG_PATH=${script_path}/../configure
- export LD_LIBRARY_PATH=${script_path}/lib64/:$LD_LIBRARY_PATH
- if [ "$NSTACK_LOG_ON" = "PERF" ]
- then
- export NSTACK_LOG_ON=PERF
- else
- export NSTACK_LOG_ON=INF
- fi
-
- log $LINENO "$env NSTACK_CONFIG_PATH=$NSTACK_CONFIG_PATH"
- log $LINENO "$env DPDK_TOOL_DIR=$DPDK_TOOL_DIR"
- log $LINENO "$env LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
- log $LINENO "$env DPDK_LIB_PATH=$DPDK_LIB_PATH"
- log $LINENO "./nStackMain -c $1 -n 4 --huge-dir=$2 --proc-type=primary --file-prefix nStackMain -m $3 $7 $8 stack -c $4 -sleep $5 -bind_cpu $6"
- check_file_size $DPDK_FILE
- cd ..; cd bin/
- ./nStackMain -c $1 -n 4 --huge-dir=$2 --proc-type=primary --file-prefix nStackMain -m $3 $7 $8 stack -c $4 -sleep $5 -bind_cpu $6 >> $DPDK_FILE &
-}
-
-
-stop_nStackProcess()
-{
- log $LINENO "$1 exiting..."
-
- local i=0
-
- while [ ${i} -lt $2 ]
- do
- #pid=`ps aux | grep $1 |grep -v grep| awk '{print $2}'`
- pid=`pidof $1`
- if [ "x${pid}" != "x" ]
- then
- kill -9 $pid 2>/dev/null
- else
- break
- fi
- i=`expr ${i} + 1`
- sleep 1
- done
-}
-
-stop_nStackApps()
-{
- log $LINENO "stop the apps that use the shared nstackhuge memory..."
-
- app_pid=`lsof $HUGE_DIR | awk '{print $2}'`
- if [ "x${app_pid}" != "x" ]
- then
- kill -9 ${app_pid} 2>/dev/null
- fi
-}
-
-get_nstack_bin()
-{
- local app=$1
- master_pid=`pidof $app | head -n 1`
- if [ "x${master_pid}" != "x" ];then
- sudo readlink -f "/proc/${master_pid}/exe" | sed "s/$app$//g" 2>/dev/null
- fi
-}
-
-
-
-get_abs_path()
-{
- local input_path=$1
- if [ -d "$input_path" -o -f "$input_path" ]; then
- echo "$(dirname $(readlink -e $input_path))/$(basename $input_path)"
- return 0
- fi
- echo $input_path
- return 1
-}
-
-
-
-CONFIG_FILE="nStackConfig.json"
-VAR_FILE="nstack_var.sh"
-
-modify_nstack_log_path()
-{
- if echo $1 |grep -Eq '^((/[a-zA-Z_]+[a-zA-Z0-9_-]+(/[a-zA-Z0-9_-]+)*/?)|/)$' > /dev/null
- then
- local parameter=$1
- else
- log $LINENO "the path is invalid, use the default config path!"
- return
- fi
-
- if [ ! -d $1 ]; then
- log $LINENO "the folder is not existed, use the default config!"
- return
- fi
-
- if [ ! -w $1 ]; then
- log $LINENO "the folder has no permission, use the default config!"
- return
- fi
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local config_name=${script_path}/configure/$CONFIG_FILE
-
- if [ ! -f $config_name ]; then
- log $LINENO "$CONFIG_FILE no exit! use default config in code."
- return
- fi
-
- sed -i 's#\("stackpool_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("master_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("nstack_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("dpdk_log_path": "\).*#\1'"$1"'"#g' ${config_name}
-}
-
-modify_log_var()
-{
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local config_name=${script_path}/configure/$CONFIG_FILE
-
- if [ ! -f $config_name ]; then
- log $LINENO "$CONFIG_FILE no exit! use default config in code."
- return
- fi
-
- local running_log_path=`grep -Po '"stackpool_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local master_log_path=`grep -Po '"master_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local nstack_log_path=`grep -Po '"nstack_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local dpdk_log_path=`grep -Po '"dpdk_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
-
-#modify the nstack_var.sh
- local var_config_name=${script_path}/script/$VAR_FILE
-
- if [ ! -f $var_config_name ]; then
- log $LINENO "$VAR_FILE not exist , exit!"
- exit 1
- fi
-
-#check the path from json if it is OK.
- if [ -n "$running_log_path" ]&&[ -w "$running_log_path" ]; then
- sed -i "s:RUNNING_FILE_DIR=.*:RUNNING_FILE_DIR=${running_log_path}:g" $var_config_name
- else
- log $LINENO "stackpool_log_path:$running_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$master_log_path" ]&&[ -w "$master_log_path" ]; then
- sed -i "s:MASTER_FILE_DIR=.*:MASTER_FILE_DIR=${master_log_path}:g" $var_config_name
- else
- log $LINENO "master_log_path:$master_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$nstack_log_path" ]&&[ -w "$nstack_log_path" ]; then
- sed -i "s:LOG_FILE_DIR=.*:LOG_FILE_DIR=${nstack_log_path}:g" $var_config_name
- else
- log $LINENO "nstack_log_path:$nstack_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$dpdk_log_path" ]&&[ -w "$dpdk_log_path" ]; then
- sed -i "s:DPDK_FILE_DIR=.*:DPDK_FILE_DIR=${dpdk_log_path}:g" $var_config_name
- else
- log $LINENO "dpdk_log_path:$dpdk_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-}
-
-
-modify_local_ip_env()
-{
-
-#modify the nstack_var.sh
- local var_config_name=${script_path}/script/$VAR_FILE
-
- if [ ! -f $var_config_name ]; then
- log $LINENO "$VAR_FILE not exist , exit!"
- exit 1
- fi
-
- sed -i "s:VM_ID=.*:VM_ID=${nstack_alarm_local_ip}:g" $var_config_name 2>/dev/null
-}
-
-
-delete_pid_file()
-{
- if [ -n "$PID_FILE" ]&&[ -f "$PID_FILE" ]
- then
- rm -rf ${PID_FILE}
- fi
-}
-
-save_pid_file()
-{
- if [ ! -d ${PID_FILE_DIR} ];
- then
- sudo mkdir -p ${PID_FILE_DIR}
- chmod 750 ${PID_FILE_DIR}
- fi
-
- if [ -f ${PID_FILE} ];
- then
- cur_pid=`cat ${PID_FILE}`
- if [ ${cur_pid} != $1 ];
- then
- rm -rf ${PID_FILE}
- else
- return
- fi
- fi
-
- touch ${PID_FILE}
- echo $1 > $PID_FILE
-
- chown paas:paas $PID_FILE
- chmod 640 $PID_FILE
-}
-
-write_pid_to_file()
-{
- retry=3
- i=0
- fail=1
-
- while [ ${i} -lt ${retry} ]
- do
- PID=`pidof nStackMaster`
- if [ ${PID} ]
- then
- fail=0
- break
- fi
-
- i=`expr ${i} + 1`
-
- sleep 1
- done
-
- if [ ${fail} -ne 0 ]
- then
- return 1
- fi
-
- if [ ! -d ${PID_FILE_DIR} ];
- then
- sudo mkdir -p ${PID_FILE_DIR}
- chmod 750 ${PID_FILE_DIR}
- fi
-
- touch ${PID_FILE}
- echo $PID > $PID_FILE
- #check log file right
- chown paas:paas $PID_FILE
- chmod 640 $PID_FILE
- return 0
-}
-
-
-
-install_config()
-{
- # set nStackConfig values
- if [ -n "$DEF_SOCK_NUM" ] ;then
- sed -i "s/\"socket_num\":[ \t0-9]*,/\"socket_num\":$DEF_SOCK_NUM,/g" ./configure/nStackConfig.json
- fi
-}
-
-copy_config()
-{
- # $1 for src nStackServer path
- # $2 for dst nStackServer path
-
- # NOTE: set src socket_num value into dst path config file, this is for copying old configuration from old version to new version path when upgrading.
- SRC_SOCK_NUM=`grep 'socket_num' $1/configure/nStackConfig.json | awk -F"," '{for (i=1;i<=NF;++i) print $i}' | awk 'gsub("\"socket_num\":","") {sub("^[ \t]*","");sub("[ \t]*$",""); print $0}'`
- sed -i "s/\"socket_num\":[ \t0-9]*,/\"socket_num\":$SRC_SOCK_NUM,/g" $2/configure/nStackConfig.json
-}
diff --git a/stacks/lwip_stack/release/script/nstack_var.sh b/stacks/lwip_stack/release/script/nstack_var.sh
deleted file mode 100755
index a654d34..0000000
--- a/stacks/lwip_stack/release/script/nstack_var.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-
-PID_FILE_DIR=/var/ICTS_BASE/run
-PID_FILE=${PID_FILE_DIR}/nstack.pid
-
-RUNNING_FILE_DIR=/var/log/nStack
-RUNNING_FILE_NAME=running.log
-
-OPERATION_FILE_NAME=operation.log
-NSTACK_CTRL_LOG_FILE_NAME=omc_ctrl.log
-GLOG_FAILURE_FILE_NAME=fail_dump.log
-NSTACK_FAILURE_FILE_NAME=nstack_error.log
-
-MASTER_FILE_DIR=/var/log/nStack
-MASTER_FILE_NAME=master.log
-
-LOG_FILE_DIR=/var/log/nStack
-LOG_FILE=${LOG_FILE_DIR}/nstack.log
-LOG_FILE_NAME=nstack.log
-
-DPDK_FILE_DIR=/var/log/nstack-dpdk
-DPDK_FILE=${DPDK_FILE_DIR}/nstack_dpdk.log
-DPDK_FILE_NAME=nstack_dpdk.log
-
-#this is env variable, it is for nstack usage, it will be modified from ./start_nstack -i hostinfo.ini
-
-export VM_ID=agent-node-x
-
-export DPDK_INSTALL_PATH="/usr/share/dpdk/"
-export DPDK_LIB_PATH=${DPDK_INSTALL_PATH}/x86_64-native-linuxapp-gcc/lib
-export DPDK_TOOL_DIR=${DPDK_INSTALL_PATH}/usertools
-export DPDK_MOD_PATH=/usr/lib/modules/`uname -r`/extra/dpdk
-
-cur_user=`whoami`
-if [ "root" != "${cur_user}" ]
-then
- HOME_DIR=$HOME
- if [ -z "${HOME}" ]
- then
- HOME_DIR=/var/run
- fi
-else
- HOME_DIR=/var/run
-fi
-RUNTIME_DIR=$HOME_DIR/ip_module
-
-DPDK_NIC_LIST_FILE=$RUNTIME_DIR/.nstack_dpdk_nic_list
-
-#single file is 50M=50*1024*1024
-MAX_LOG_FILE_SIZE=52428800
-HUGE_PAGES=2048
-HUGE_DIR=/mnt/nstackhuge
-
-SLEEP_INTERVAL=100 # tcpip thread sleep time, unit: us
-BIND_CPU=1
-
-MEM_SIZE=3072
-RTP_CORE_MASK=2
-
-MASTER_EXEC_PATH="/product/gpaas/nStackMaster/bin"
-RUN_NSTACK_FILE=run_nstack.sh
-
-
-#default config definitions
-DEF_SOCK_NUM=8192
diff --git a/stacks/lwip_stack/release/script/run_nstack_main.sh b/stacks/lwip_stack/release/script/run_nstack_main.sh
deleted file mode 100755
index 9d6049a..0000000
--- a/stacks/lwip_stack/release/script/run_nstack_main.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-DIR=`S=\`readlink "$0"\`; [ -z "$S" ] && S=$0; dirname $S`
-cd $DIR
-
-. ./nstack_var.sh
-. ./nstack_fun.sh
-
-########################################################
-# check parameter
-
-log $LINENO "dir=$DIR"
-
-########################################################
-# init netrork:unbind->/* modprobe uio->insmod igb_uio */->bind
-init_network
-
-########################################################
-# start nstack main
-CORE_MASK=1
-log $LINENO "start run nstackmain"
-log $LINENO "COREMASK=$CORE_MASK, HUGE_DIR=$1, MEM_SIZE=$2, RTP_CORE_MASK=$RTP_CORE_MASK, SLEEP_INTERVAL=$SLEEP_INTERVAL, BIND_CPU=$BIND_CPU"
-log $LINENO "VDEV=$VDEV, NO_PCI=$NO_PCI"
-
-run_nStackMain $CORE_MASK $1 $2 $RTP_CORE_MASK $SLEEP_INTERVAL $BIND_CPU $3 $4
-
-exit 0
diff --git a/stacks/lwip_stack/release/script/run_nstack_master.sh b/stacks/lwip_stack/release/script/run_nstack_master.sh
deleted file mode 100755
index 8da0d49..0000000
--- a/stacks/lwip_stack/release/script/run_nstack_master.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-DIR=`S=\`readlink "$0"\`; [ -z "$S" ] && S=$0; dirname $S`
-cd $DIR
-. ./nstack_var.sh
-
-
-if [ -n "${MASTER_EXEC_PATH}" ]; then
- mkdir -p $MASTER_EXEC_PATH
- chown -R paas: $MASTER_EXEC_PATH
- chmod 750 $MASTER_EXEC_PATH
- cp ../bin/nStackMaster $MASTER_EXEC_PATH -rf
- cp ../configure/nStackConfig.json $MASTER_EXEC_PATH -rf
- ln -s -f $(cd "$(dirname "$0")"; pwd)/run_nstack_main.sh $MASTER_EXEC_PATH/${RUN_NSTACK_FILE}
- cd $MASTER_EXEC_PATH
-fi
-
-runnStackMaster(){
- sudo setcap CAP_IPC_OWNER,CAP_NET_ADMIN,CAP_DAC_OVERRIDE=eip ./nStackMaster
-
- script_path=$(cd "$(dirname "$0")"; pwd)
- export NSTACK_CONFIG_PATH=${script_path}
-
- ./nStackMaster -c $1 -n 4 --huge-dir=$2 -m $3 --proc-type=$4 >> ${DPDK_FILE}
-}
-
-runnStackMaster $1 $2 $3 $4 &
-
-exit 0
diff --git a/stacks/lwip_stack/release/send_alarm.sh b/stacks/lwip_stack/release/send_alarm.sh
deleted file mode 100755
index 46ea413..0000000
--- a/stacks/lwip_stack/release/send_alarm.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-cur_dir=$(cd "$(dirname "$0")"; pwd)
-alarm_history=${cur_dir}/.nstack_fault_alarm
-
-. ./script/nstack_var.sh
-. ./script/nstack_fun.sh
-
-if [ ! -f ${alarm_history} ]; then
- ./nStackCtrl --module alm -n nsMain -t abnormal
- log $LINENO "nstack is not running ok, send fault alarm"
- touch ${alarm_history}
-else
- log $LINENO "nstack is not running ok, send fault alarm already"
-fi
-
-exit 0 \ No newline at end of file
diff --git a/stacks/lwip_stack/release/start_nstack.sh b/stacks/lwip_stack/release/start_nstack.sh
deleted file mode 100755
index 35fe9df..0000000
--- a/stacks/lwip_stack/release/start_nstack.sh
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/bin/bash
-
-
-script_path=$(cd "$(dirname "$0")"; pwd)
-
-. ${script_path}/script/nstack_var.sh
-. ${script_path}/script/nstack_fun.sh
-
-config_name=${script_path}/script/nstack_var.sh
-if [ ! -e $config_name ]; then
- log $LINENO "nstack_var.sh not exit, plz check!"
- exit 1
-fi
-
-########################################################
-##get the log info from the parameter of ./start -l XXX -a XXX ###
-nstack_log_path=""
-hostinfo_path=""
-ARGS=`getopt -o "l:i:a:" -l "vdev:,file-prefix:,no-pci" -n "start_nstack.sh" -- "$@"`
-eval set -- "${ARGS}"
-while true
-do
- case "$1" in
- -l)
- nstack_log_path="$2"
- shift 2
- ;;
- -i)
- hostinfo_path="$2"
- shift 2
- ;;
- --vdev)
- VDEV="--vdev=$2"
- shift 2
- ;;
- --file-prefix)
- FILE_PREFIX="--file-prefix=$2"
- shift 2
- ;;
- --no-pci)
- NO_PCI="--no-pci"
- shift 1
- ;;
- --)
- shift
- break
- ;;
- *)
- echo "Option illegal, please check input!"
- exit 1
- ;;
- esac
-done
-
-hostinfo_stat=0
-
-(
-flock -e -n 200
-if [ $? -eq 1 ]
-then
- log $LINENO "another process is running now, exit"
- exit 1
-fi
-
-########################################################
-# modify the nstack & dpdk log path config: nStackConfig.json
-if [ -n "$nstack_log_path" ]; then
- modify_nstack_log_path $nstack_log_path
-fi
-
-if [ -n "$hostinfo_path" -a -e "$hostinfo_path" -a -r "$hostinfo_path" ]; then
- nstack_alarm_local_ip=($(awk -F '=' '/\['AGENT'\]/{a=1}a==1&&$1"="~/^(\s*)(VM_ID)(\s*)(=)/{print $2 ;exit}' $hostinfo_path))
- modify_local_ip_env
-else
- hostinfo_stat=1
-fi
-
-
-########################################################
-#set the log path in nstack_var.sh#####
-modify_log_var
-) 200>>./lockfile
-
-if [ -f "lockfile" ]; then
- rm lockfile
-fi
-
-. ${script_path}/script/nstack_var.sh
-
-
-########################################################
-# init_log_file:nstack.log and dpdk.log
-# if need print log, the messgae need add after init_log_file
-init_log_file
-
-if [ "$hostinfo_stat" -ne 0 ]; then
- log $LINENO "please use correct -i parameter for start_nstack.sh"
- log $LINENO "host info path:$hostinfo_path"
- hostinfo_stat=0
-fi
-
-log $LINENO "######################start nstack######################"
-
-########################################################
-# check application running
-process_nstack_main=nStackMain
-
-pid_nstack=`pidof $process_nstack_main`
-
-nstack_ctrl_path=${script_path}/bin
-
-pgrep nStackMain
-main_run_status=$?
-if [ ${main_run_status} -eq 0 ]; then
- log $LINENO "nStackMain is running ok, please stop it first!"
- save_pid_file ${pid_master}
- exit 0
-fi
-
-huge_files=`ls /mnt/nstackhuge`
-if [ "x${huge_files}" != "x" ]
-then
- if [ "x${pid_nstack}" = "x" ]
- then
- log $LINENO "huge page file exist and nStackMain not exist"
- exit 1
- fi
-fi
-
-
-########################################################
-# set hugepage
-init_hugepage $process_nstack_main
-
-
-########################################################
-# install config
-install_config
-
-########################################################
-core_mask=1
-START_TYPE="primary"
-log $LINENO "./script/run_nstack_main.sh ${core_mask} $HUGE_DIR $MEM_SIZE $START_TYPE $VDEV $NO_PCI"
-${script_path}/script/run_nstack_main.sh $HUGE_DIR $MEM_SIZE $VDEV $NO_PCI
-
-print_pid=$(ps -ux | grep nStackMain | awk '{print $2}' | awk 'NR == 2')
-echo "nStackMain PID:$print_pid"
-log $LINENO "nstack start success"
-exit 0
diff --git a/stacks/lwip_stack/release/stop_nstack.sh b/stacks/lwip_stack/release/stop_nstack.sh
deleted file mode 100755
index 48d1af7..0000000
--- a/stacks/lwip_stack/release/stop_nstack.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-
-
-script_path=$(cd "$(dirname "$0")"; pwd)
-
-. ${script_path}/script/nstack_var.sh
-. ${script_path}/script/nstack_fun.sh
-
-config_name=${script_path}/script/nstack_var.sh
-if [ ! -e $config_name ]; then
- log $LINENO "$config_name not exit, plz pay attention and add back!,or it has resourcce leak."
-fi
-
-cur_user=`whoami`
-
-########################################################
-# init_log_file:nstack.log and dpdk.log
-init_log_file
-log $LINENO "#######################stop nstack#######################"
-
-#############################################
-# step1 stop nstack master
-retry=3
-stop_nStackProcess nStackMaster $retry
-
-#############################################
-# step2 stop nstack
-stop_nStackProcess nStackMain $retry
-
-
-#############################################
-# step3 stop all apps that usg the nstack hugepage
-if [ ${cur_user} = "root" ]; then
- stop_nStackApps
-else
- log $LINENO "not root, app not stopped"
-fi
-
-#############################################
-# step4 delete the huge page files created by nstack
-recover_hugepage
-
-#############################################
-# step5 recover the nic configuration
-recover_network
-
-#############################################
-# step6 delete pid file
-delete_pid_file
-
-exit 0
diff --git a/stacks/lwip_stack/release/uninstall.sh b/stacks/lwip_stack/release/uninstall.sh
deleted file mode 100755
index 92ae5fe..0000000
--- a/stacks/lwip_stack/release/uninstall.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-. ./script/nstack_var.sh
-. ./script/nstack_fun.sh
-
-########################################################
-# init_log_file:nstack.log and dpdk.log
-init_log_file
-log $LINENO "#######################uninstall nstack#######################"
-
-
-#############################################
-# step1 stop the applications that use the shared huge memory of nstack
-stop_nStackApps
-
-#############################################
-# step2 delete the huge page files created by nstack
-recover_hugepage
-
-
-#############################################
-# step3 recover the nic configuration
-recover_network
-
-
-#############################################
-# step4 delete nstack log files
-delete_log_file
-
-
-# log file has been deleted, should print on screen now
-echo "uninstall nStack successfully!"
-
-exit 0
diff --git a/stacks/lwip_stack/release_tar.sh b/stacks/lwip_stack/release_tar.sh
deleted file mode 100644
index d3cfa68..0000000
--- a/stacks/lwip_stack/release_tar.sh
+++ /dev/null
@@ -1,86 +0,0 @@
-if [ ! -d "./nStackServer" ]; then
- mkdir ./nStackServer
-else
- rm -rf ./nStackServer/*
-fi
-
-if [ ! -d "./nStackClient" ]; then
- mkdir ./nStackClient
-else
- rm -rf ./nStackClient/*
-fi
-
-if [ ! -d "./nStackTools" ]; then
- mkdir ./nStackTools
-else
- rm -rf ./nStackTools/*
-fi
-
-if [ -f "./nStackServer.tar.gz" ]; then
- rm -rf ./nStackServer.tar.gz
-fi
-
-if [ -f "./nStackClient.tar.gz" ]; then
- rm -rf ./nStackClient.tar.gz
-fi
-
-if [ -f "./nStackTools.tar.gz" ]; then
- rm -rf ./nStackTools.tar.gz
-fi
-
-mkdir ./nStackServer/lib64
-cp ./release/lib64/liblwip_dpdk.so ./release/lib64/libnStackAPI.so ./release/lib64/libnstackcmd.so ./release/lib64/libsecurec.so ./nStackServer/lib64
-mkdir ./nStackServer/bin
-cp ./release/bin/nStackCtrl ./release/bin/nStackMain ./release/bin/nStackMaster ./release/bin/set_permission.sh ./nStackServer/bin
-mkdir ./nStackServer/conf
-cp ./release/conf/nstack.monitrc ./release/conf/nstack_ctl ./release/conf/srvnstack ./nStackServer/conf
-mkdir ./nStackServer/configure
-cp ./release/configure/ip_data.json ./release/configure/network_data_tonStack.json ./release/configure/nStackConfig.json ./nStackServer/configure
-mkdir ./nStackServer/script
-cp -d ./release/script/nstack_fun.sh ./release/script/nstack_var.sh ./release/script/run_nstack_main.sh ./release/script/run_nstack_master.sh ./nStackServer/script
-mkdir ./nStackServer/tools
-cp ./release/tools/nping ./nStackServer/tools/
-
-cp ./release/check_status.sh ./release/send_alarm.sh ./release/start_nstack.sh ./release/stop_nstack.sh ./release/graceful_stop_nstack.sh ./release/uninstall.sh ./release/upgrade_nstack.sh ./nStackServer/
-
-dos2unix ./nStackServer/*.sh
-find ./nStackServer -type f | grep -E "*.sh|*.py" | xargs chmod +x
-
-mkdir ./nStackClient/lib64
-cp ./release/lib64/liblwip_dpdk.so ./release/lib64/libnStackAPI.so ./release/lib64/libsecurec.so ./nStackClient/lib64
-mkdir ./nStackClient/include
-cp ./release/include/nstack_custom_api.h ./nStackClient/include
-
-cp ./release/tools/nping ./release/tools/ntcpdump ./nStackTools/
-
-# set permission
-chown -R paas: ./nStackServer/
-chown -R paas: ./nStackClient/
-chown -R paas: ./nStackTools/
-
-chmod 750 ./nStackServer
-chmod 550 ./nStackServer/bin/
-chmod 750 ./nStackServer/configure
-chmod 750 ./nStackServer/script
-chmod 750 ./nStackServer/conf
-chmod 750 ./nStackServer/lib64
-chmod 750 ./nStackServer/tools
-chmod 750 ./nStackClient
-chmod 750 ./nStackClient/include
-chmod 750 ./nStackClient/lib64
-chmod 750 ./nStackTools
-
-chmod 750 ./nStackServer/bin/nStack*
-chmod 750 ./nStackServer/*.sh
-chmod 750 ./nStackServer/bin/*.sh
-chmod 750 ./nStackServer/conf/*
-chmod 750 ./nStackServer/script/*.sh
-chmod 640 ./nStackServer/lib64/*
-chmod 640 ./nStackServer/configure/*
-chmod 500 ./nStackServer/bin/set_permission.sh
-chmod 750 ./nStackTools/*
-
-
-tar -zcvf nStackServer.tar.gz nStackServer
-tar -zcvf nStackClient.tar.gz nStackClient
-tar -zcvf nStackTools.tar.gz nStackTools
diff --git a/stacks/lwip_stack/run_stackx.txt b/stacks/lwip_stack/run_stackx.txt
deleted file mode 100644
index dbc936e..0000000
--- a/stacks/lwip_stack/run_stackx.txt
+++ /dev/null
@@ -1,52 +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.
-#########################################################################
-
-#build DPDK, DMM, lwip stack by calling build script:
-====================================================
- cd dmm/stacks/lwip_stack/vagrant
- build.sh
-
-#update interface name if required(default enp0s8) in dmm/stacks/lwip_stack/vagrant/start_nstackMain.sh
-#Start nStackMain:
-=================
- 1.for the first time (to configure json files and start nStackMain)
- cd dmm/stacks/lwip_stack/vagrant
- ./start_nstackMain.sh
-
- 2.from secod time:
- cd dmm/stacks/lwip_stack/release
- ./start_nstack.sh
-
-#get configured client/server ip from dmm/stacks/lwip_stack/release/bin/ip_data.json
-#can get the log path details from dmm/stacks/lwip_stack/release/bin/nStackConfig.json
-
-#run app:
-========
- cd dmm/stacks/lwip_stack/app_test
-
- #server
- ./vs_epoll -p 20000 -d {client_ip} -a 10000 -s {ser_ip} -l 200 -t 5000000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
-
- #client
- ./vc_epoll -p 20000 -d {ser_ip} -a 10000 -s {client_ip} -l 200 -t 50000 -i 1000 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
-
- #perf
- for better performance set environment variable NSTACK_LOG_ON=PERF before running nStakMain and app
-
-#stop nStackMain:
-================
- cd dmm/stacks/lwip_stack/release
- ./stop_nstack.sh
diff --git a/stacks/lwip_stack/src/CMakeLists.txt b/stacks/lwip_stack/src/CMakeLists.txt
deleted file mode 100644
index 6aacf07..0000000
--- a/stacks/lwip_stack/src/CMakeLists.txt
+++ /dev/null
@@ -1,62 +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.
-#########################################################################
-
-SET(RTP_DIRECTORIES "${PROJECT_SOURCE_DIR}/src/include/")
-
-INCLUDE_DIRECTORIES(
- framework/log/
- framework/include/
- framework/common/include/
- framework/common/base/include/
- ${RTP_DIRECTORIES}
- ${RTP_DIRECTORIES}/generic
- ../../SecureC/include/
- ../../../thirdparty/glog/glog-0.3.4/src/
-)
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIC -m64 -mssse3 -std=gnu89")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wshadow -Wfloat-equal -Wformat=2")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags,--rpath,../lib64")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium")
-
-if(WITH_HAL_LIB)
-SET(RTP_CONFIG ${PROJECT_SOURCE_DIR}/src/include/rtp_config.h)
-else()
- SET(RTP_CONFIG ${CMAKE_CURRENT_LIST_DIR}/../../../src/framework/common/base/include/common/common_sys_config.h)
-endif()
-SET(COMPLE_CONFIG ${PROJECT_SOURCE_DIR}/src/include/compile_config.h)
-ADD_DEFINITIONS(-include ${RTP_CONFIG})
-ADD_DEFINITIONS(-include ${COMPLE_CONFIG})
-ADD_DEFINITIONS(-D_GNU_SOURCE)
-ADD_DEFINITIONS(-DDPDK_MODULE=0)
-#ADD_DEFINITIONS(-DNSTACK_RSRDMA)
-LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC})
-
-if(WITH_SECUREC_LIB)
-LINK_LIBRARIES(pthread dl securec)
-else()
-LINK_LIBRARIES(pthread dl)
-endif()
-
-ADD_SUBDIRECTORY(maintain)
-ADD_SUBDIRECTORY(io_adpt)
-ADD_SUBDIRECTORY(sbr)
-#ADD_SUBDIRECTORY(nStackCtrl)
-ADD_SUBDIRECTORY(nStackMain)
-ADD_SUBDIRECTORY(tools)
-ADD_SUBDIRECTORY(alarm)
-#ADD_SUBDIRECTORY(nstackcmd)
diff --git a/stacks/lwip_stack/src/alarm/CMakeLists.txt b/stacks/lwip_stack/src/alarm/CMakeLists.txt
deleted file mode 100644
index 3de07b0..0000000
--- a/stacks/lwip_stack/src/alarm/CMakeLists.txt
+++ /dev/null
@@ -1,34 +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.
-#########################################################################
-
-FILE(GLOB_RECURSE ALARM *.c)
-
-LINK_LIBRARIES(m dl rt dmm_api)
-if(WITH_SECUREC_LIB)
-INCLUDE_DIRECTORIES(
- ./
- ${JSON_C_SRC}
- ${SECUREC_SRC}
- ${CMAKE_CURRENT_LIST_DIR}/../include/
-)
-else()
-INCLUDE_DIRECTORIES(
- ./
- ${JSON_C_SRC}
- ${CMAKE_CURRENT_LIST_DIR}/../include/
-)
-endif()
-ADD_LIBRARY(nStackAlarm STATIC ${ALARM})
diff --git a/stacks/lwip_stack/src/alarm/alarm.c b/stacks/lwip_stack/src/alarm/alarm.c
deleted file mode 100644
index c158144..0000000
--- a/stacks/lwip_stack/src/alarm/alarm.c
+++ /dev/null
@@ -1,861 +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 "types.h"
-#include "nsfw_mgr_com_api.h"
-#include "nsfw_fd_timer_api.h"
-#include "alarm.h"
-#include "alarm_api.h"
-#include<time.h>
-#include<sys/time.h>
-#include "nsfw_init.h"
-#include "nstack_log.h"
-#include "json.h"
-#include "nstack_securec.h"
-#include <stdlib.h>
-#include "nstack_dmm_adpt.h"
-
-char g_vmid[MAX_VMID_LEN + 1] = "agent-node-x";
-
-extern nsfw_timer_info *nsfw_timer_reg_timer (u32 timer_type, void *data,
- nsfw_timer_proc_fun fun,
- struct timespec time_left);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif /* __cplusplus */
-
-// note:the first element is reserved
-alarm_data g_alarm_data[ALARM_EVENT_MAX] = { };
-
-alarm_result
-ms_alarm_check_func (void *para)
-{
- alarm_result ret_alarm;
- int para_value = (long) para;
-
- ret_alarm.alarm_id_get = ALARM_EVENT_NSTACK_MAIN_ABNORMAL;
-
- if (para_value == ALARM_PRODUCT)
- {
- ret_alarm.alarm_flag_get = ALARM_PRODUCT;
- }
- else if (para_value == ALARM_CLEAN)
- {
- ret_alarm.alarm_flag_get = ALARM_CLEAN;
- }
- else
- {
- ret_alarm.alarm_id_get = ALARM_EVENT_MAX;
- }
-
- ret_alarm.alarm_reason_get = ALARM_REASON_NSMAIN;
-
- return ret_alarm;
-
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : period check alarm expire handle function
-********************************************************************/
-
-int
-ns_alarm_timer_resend_fun (u32 timer_type, void *argv)
-{
- int i;
- struct timespec time_left;
- alarm_data *alarm_value;
-
- for (i = ALARM_EVENT_BASE; i < ALARM_EVENT_MAX; i++)
- {
- alarm_value = &g_alarm_data[i];
-
- if ((alarm_value->valid_flag == 1)
- && (alarm_value->send_succ_flag == ALARM_SEND_FAIL))
- {
- /* nStack only send nsMain normal alarm */
- ns_send_alarm_inner (alarm_value->_alarm_id,
- (void *) (alarm_value->_alarm_flag), 1, 0);
- }
- }
-
- time_left.tv_sec = ALARM_RESEND_TIMER_LENGTH;
- time_left.tv_nsec = 0;
- nsfw_timer_info *timer_info =
- nsfw_timer_reg_timer (0, NULL, ns_alarm_timer_resend_fun, time_left);
- if (NULL == timer_info)
- {
- NSAM_LOGERR ("nsfw_timer_reg_timer fail");
- }
-
- return 0;
-}
-
-void
-ns_alarm_set_sendFlag (enum_alarm_id alarmId, int flag)
-{
- if ((alarmId <= 0) || (alarmId >= ALARM_EVENT_MAX)
- || (0 == g_alarm_data[alarmId].valid_flag) || ((flag != ALARM_SEND_FAIL)
- && (flag !=
- ALARM_SEND_SUCC)))
- {
- NSAM_LOGERR ("alarm_id is invalid or not reg or flag invalid");
- return;
- }
- g_alarm_data[alarmId].send_succ_flag = flag;
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : alarm module init
-********************************************************************/
-int
-ns_alarm_module_init (void *param)
-{
- u32 proc_type = (u32) ((long long) param);
- enum_alarm_id i = ALARM_EVENT_BASE;
- alarm_reason j = ALARM_REASON_BEGIN;
- const char *pst_vm_id = NULL;
- alarm_para tcp_alarm_para;
- struct timespec time_left;
-
- for (i = ALARM_EVENT_BASE; i < ALARM_EVENT_MAX; i++)
- {
- g_alarm_data[i]._alarm_type = ALARM_SEND_ONCE;
-
- for (j = ALARM_REASON_BEGIN; j < ALARM_REASON_MAX; j++)
- {
- g_alarm_data[i]._alarm_para.func_alarm_check[j] = NULL;
- g_alarm_data[i]._alarm_para.alarm_reason_set[j] = ALARM_REASON_MAX;
- g_alarm_data[i].alarm_time_laps[j] = 0;
- }
- g_alarm_data[i]._alarm_para.period_alarm.time_length = 0;
- g_alarm_data[i]._alarm_id = i;
- g_alarm_data[i].valid_flag = 0;
- g_alarm_data[i]._alarm_flag = ALARM_CLEAN;
- g_alarm_data[i].alarm_reason_cnt = 0;
- g_alarm_data[i].send_succ_flag = ALARM_SEND_SUCC;
- }
-
- switch (proc_type)
- {
- case NSFW_PROC_MAIN:
- case NSFW_PROC_CTRL:
-
- /* modify ip address to vm id */
- pst_vm_id = getenv ("VM_ID");
-
- if (INVALID_STR_LEN (pst_vm_id, MIN_VM_ID_LEN, MAX_VM_ID_LEN))
- {
- NSAM_LOGWAR
- ("invalid VM_ID,please check env VM_ID]vm_id=%s, proc_type=%u",
- pst_vm_id, proc_type);
- }
- else
- {
- int retVal = STRNCPY_S (g_vmid, MAX_VMID_LEN + 1, pst_vm_id,
- strlen (pst_vm_id));
-
- if (EOK != retVal)
- {
- NSAM_LOGERR ("STRNCPY_S failed]ret=%d", retVal);
- }
- }
-
- tcp_alarm_para.period_alarm.time_length = 0; /* 5 second period */
- tcp_alarm_para.alarm_reason_count = 1; /*both resource */
-
- tcp_alarm_para.func_alarm_check[0] = ms_alarm_check_func;
- tcp_alarm_para.alarm_reason_set[0] = ALARM_REASON_NSMAIN;
- (void) ns_reg_alarm (ALARM_EVENT_NSTACK_MAIN_ABNORMAL, ALARM_SEND_ONCE,
- &tcp_alarm_para);
-
- time_left.tv_sec = ALARM_INIT_RESEND_TIMER_LENGTH;
- time_left.tv_nsec = 0;
- nsfw_timer_info *timer_info =
- nsfw_timer_reg_timer (0, NULL, ns_alarm_timer_resend_fun, time_left);
- if (NULL == timer_info)
- {
- NSAM_LOGERR ("nsfw_timer_reg_timer fail");
- }
-
- break;
- default:
- break;
- }
-
- return 0;
-}
-
-#define JSON_NEW_OBJ(obj, cb, para1, para2)\
- {\
- obj = json_object_new_object();\
- if (obj == NULL)\
- {\
- (void)cb(para1);\
- (void)cb(para2);\
- return -1;\
- }\
- }
-
-#define JSON_NEW_STRING_OBJ(str, obj, cb, para1, para2)\
- {\
- obj = json_object_new_string((str));\
- if (obj == NULL)\
- {\
- (void)cb(para1);\
- (void)cb(para2);\
- return -1;\
- }\
- }
-
-#define JSON_NEW_STRING_OBJ_1(val, obj, cb, para1, para2,para3)\
- {\
- obj = json_object_new_string((val));\
- if (obj == NULL)\
- {\
- (void)cb(para1);\
- (void)cb(para2);\
- (void)cb(para3);\
- return -1;\
- }\
- }
-
-#define JSON_NEW_INT_OBJ(val, obj, cb, para1, para2)\
- {\
- obj = json_object_new_int((val));\
- if (obj == NULL)\
- {\
- (void)cb(para1);\
- (void)cb(para2);\
- return -1;\
- }\
- }
-
-/*****************************************************************************
-* Prototype : ns_get_alarm_body
-* Description : get body by alarm parameter
-* Input : char *buf
-* int buf_len
-* alarm_result alarm_res
-* Output : None
-* Return Value : int
-*****************************************************************************/
-int
-ns_get_alarm_body (char *buf, int buf_len, alarm_result alarm_res)
-{
-#define ALARM_NAME_LENGTH 100
-#define COMPONENT_NAME "nStack"
- int retVal;
- size_t str_len;
- int alarm_id = alarm_res.alarm_id_get + 27000;
- struct timeval t_val;
- struct tm now_time;
- char *alarm_string = NULL, *alarm_reason_info = NULL, *alarm_desc = NULL;
- json_object *temp_jso = NULL, *alarm_info = NULL;
- alarm_info_s_out *alarmpara_out = NULL;
- int perceivedSeverity_value = 0;
- char *action_string = NULL;
- if (buf == NULL || (buf_len < (int) sizeof (alarm_info_s_out)))
- {
- NSAM_LOGERR ("input para invalid");
- return -1;
- }
- alarmpara_out = (alarm_info_s_out *) buf;
-
- /*use sizeof(alarmpara_out->alarmId) instead of devil figure 16 */
- retVal =
- SPRINTF_S (alarmpara_out->alarmId, sizeof (alarmpara_out->alarmId), "%d",
- alarm_id);
- if (-1 == retVal)
- {
- NSAM_LOGERR ("SPRINTF_S failed]ret=%d", retVal);
- return -1;
- }
-
- (void) gettimeofday (&t_val, NULL);
- time_t t_sec = (time_t) t_val.tv_sec;
- /*return value check */
- if (NULL == localtime_r (&t_sec, &now_time))
- {
- NSAM_LOGERR ("localtime_r failed]");
- return -1;
- }
-
- /*use sizeof(alarmpara_out->alarmtime) instead of devil figure 32 */
- retVal =
- SPRINTF_S (alarmpara_out->alarmtime, sizeof (alarmpara_out->alarmtime),
- "%4d%02d%02d%02d%02d%02d%06ld", now_time.tm_year + 1900,
- now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_hour,
- now_time.tm_min, now_time.tm_sec, (long) t_val.tv_usec);
- if (-1 == retVal)
- {
- NSAM_LOGERR ("SPRINTF_S failed]ret=%d", retVal);
- return -1;
- }
-
- retVal =
- STRNCPY_S (alarmpara_out->comptentname,
- sizeof (alarmpara_out->comptentname), COMPONENT_NAME,
- strlen (COMPONENT_NAME));
- if (EOK != retVal)
- {
- NSAM_LOGERR ("STRNCPY_S failed]ret=%d", retVal);
- return -1;
- }
-
- switch (alarm_res.alarm_reason_get)
- {
- case ALARM_REASON_SOCKET:
- /* alarmName and reason info is incorrect */
- alarm_reason_info = "socketResource";
- if (alarm_res.alarm_flag_get == ALARM_PRODUCT)
- {
- alarm_string = "networkResourceOverload";
- alarm_desc = "more than 80 percent used";
- perceivedSeverity_value = 2;
- action_string = "alarm";
- }
- else
- {
- alarm_string = "networkResourceNormal";
- alarm_desc = "less than 60 percent used";
- perceivedSeverity_value = 5;
- action_string = "clear";
- }
-
- break;
- case ALARM_REASON_MSG_BUF:
- alarm_reason_info = "SendBufResource";
- if (alarm_res.alarm_flag_get == ALARM_PRODUCT)
- {
- alarm_string = "networkResourceOverload";
- alarm_desc = "more than 80 percent used";
- perceivedSeverity_value = 2;
- action_string = "alarm";
- }
- else
- {
- alarm_string = "networkResourceNormal";
- alarm_desc = "less than 60 percent used";
- perceivedSeverity_value = 5;
- action_string = "clear";
- }
-
- break;
- case ALARM_REASON_NSMAIN:
- /* process status alarm change from event to alarm/clear */
- alarm_reason_info = "networkProcStatus";
- if (alarm_res.alarm_flag_get == ALARM_PRODUCT)
- {
- alarm_string = "network-data-down";
- alarm_desc = "networkProcDown";
- perceivedSeverity_value = 2;
- action_string = "alarm";
- }
- else
- {
- alarm_string = "network-data-up";
- alarm_desc = "networkProcUp";
- perceivedSeverity_value = 5;
- action_string = "clear";
- }
-
- break;
- default:
- NSAM_LOGERR ("alarm_reason incorrect]ret=%d",
- alarm_res.alarm_reason_get);
- return -1;
- }
-
- str_len = 0;
-
- json_object *alarmlist = json_object_new_object ();
- if (NULL == alarmlist)
- {
- NSAM_LOGERR ("alarmlist is NULL");
- return -1;
- }
-
- json_object *alarmItem = json_object_new_object ();
-
- if (NULL == alarmItem)
- {
- NSAM_LOGERR ("alarmItem is NULL");
- (void) json_object_put (alarmlist);
- return -1;
- }
-
- JSON_NEW_STRING_OBJ ("ICTS_BASE=1", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "neDN", temp_jso);
- JSON_NEW_STRING_OBJ ("service", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "neType", temp_jso);
- JSON_NEW_STRING_OBJ ("ICTS_BASE", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "neName", temp_jso);
- JSON_NEW_STRING_OBJ ("service", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "objectClass", temp_jso);
- JSON_NEW_STRING_OBJ ("nStack", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "moDN", temp_jso);
- JSON_NEW_STRING_OBJ ("nStack", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "moName", temp_jso);
- JSON_NEW_STRING_OBJ ("default", temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "userId", temp_jso);
-
- JSON_NEW_INT_OBJ (alarm_id, temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "alarmId", temp_jso);
-
- JSON_NEW_INT_OBJ (10001, temp_jso, json_object_put, alarmlist, alarmItem);
- json_object_object_add (alarmItem, "groupId", temp_jso);
-
- JSON_NEW_STRING_OBJ (g_vmid, temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "objectInstance", temp_jso);
- JSON_NEW_INT_OBJ (8, temp_jso, json_object_put, alarmlist, alarmItem);
- json_object_object_add (alarmItem, "eventType", temp_jso);
-
- JSON_NEW_STRING_OBJ (alarm_string, temp_jso, json_object_put, alarmlist,
- alarmItem);
- json_object_object_add (alarmItem, "alarmName", temp_jso);
-
- JSON_NEW_INT_OBJ (perceivedSeverity_value, temp_jso, json_object_put,
- alarmlist, alarmItem);
-
- json_object_object_add (alarmItem, "perceivedSeverity", temp_jso);
-
- JSON_NEW_OBJ (alarm_info, json_object_put, alarmlist, alarmItem);
- JSON_NEW_STRING_OBJ_1 (alarm_reason_info, temp_jso, json_object_put,
- alarmlist, alarmItem, alarm_info);
- json_object_object_add (alarm_info, "reason", temp_jso);
- JSON_NEW_STRING_OBJ_1 (alarm_desc, temp_jso, json_object_put, alarmlist,
- alarmItem, alarm_info);
- json_object_object_add (alarm_info, "desc", temp_jso);
- json_object_object_add (alarmItem, "alarmInfo", alarm_info);
-
- JSON_NEW_STRING_OBJ (action_string, temp_jso, json_object_put, alarmlist,
- alarmItem);
-
- json_object_object_add (alarmlist, "data", alarmItem);
-
- json_object_object_add (alarmlist, "action", temp_jso);
-
- const char *str = json_object_to_json_string (alarmlist);
- if (str == NULL)
- {
- NSMON_LOGERR ("json_object_to_json_string fail");
- (void) json_object_put (alarmlist);
- return -1;
- }
-
- str_len = strlen (str);
-
- if (str_len >= ALARM_PARA_LENGTH_OUTER)
- {
- NSAM_LOGERR ("str_len >= ALARM_PARA_LENGTH_OUTER");
- (void) json_object_put (alarmlist);
- return -1;
- }
-
- retVal =
- STRNCPY_S (alarmpara_out->alarmcontent, ALARM_PARA_LENGTH_OUTER, str,
- str_len + 1);
-
- if (EOK != retVal)
- {
- NSAM_LOGERR ("STRNCPY_S failed]ret=%d", retVal);
- (void) json_object_put (alarmlist);
- return -1;
- }
-
- (void) json_object_put (alarmlist);
-
- return 0;
-
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : send alarm to thirdparty alarm module, now only log
-********************************************************************/
-int
-ns_send_alarm_to_alarm_module (alarm_result alarm_res)
-{
- int retVal = -1;
-
- nsfw_mgr_msg *req_msg =
- nsfw_mgr_msg_alloc (MGR_MSG_LARGE_ALARM_RSP, NSFW_PROC_ALARM);
-
- if (NULL == req_msg)
- {
- NSAM_LOGERR ("mgr_msg_alloc fail]alarm_id=%d", alarm_res.alarm_id_get);
- return -1;
- }
-
- if (req_msg->msg_len < (NSFW_MGR_MSG_HDR_LEN + sizeof (alarm_info_s_out)))
- {
- NSAM_LOGERR ("mgr_msg_alloc length fail]alarm_id=%d",
- alarm_res.alarm_id_get);
- nsfw_mgr_msg_free (req_msg);
- return -1;
- }
- /* husky agent receive alarm info using fixed length */
- req_msg->msg_len = (NSFW_MGR_MSG_HDR_LEN + sizeof (alarm_info_s_out));
-
- retVal =
- ns_get_alarm_body ((char *) req_msg->msg_body,
- NSFW_MGR_LARGE_MSG_BODY_LEN, alarm_res);
-
- if (-1 == retVal)
- {
- NSAM_LOGERR ("ns_get_alarm_body fail]alarm_id=%d",
- alarm_res.alarm_id_get);
- nsfw_mgr_msg_free (req_msg);
- return -1;
- }
-
- u8 ret = nsfw_mgr_send_msg (req_msg);
-
- if (FALSE == ret)
- {
- NSAM_LOGERR ("nsfw_mgr_send_msg fail]alarm_id=%d,reason=%d,flag=%d",
- alarm_res.alarm_id_get, alarm_res.alarm_reason_get,
- alarm_res.alarm_flag_get);
- ns_alarm_set_sendFlag (alarm_res.alarm_id_get, ALARM_SEND_FAIL);
- nsfw_mgr_msg_free (req_msg);
- return -1;
- }
-
- NSAM_LOGINF ("nsfw_mgr_send_msg succ]alarm_id=%d,reason=%d,flag=%d",
- alarm_res.alarm_id_get, alarm_res.alarm_reason_get,
- alarm_res.alarm_flag_get);
- ns_alarm_set_sendFlag (alarm_res.alarm_id_get, ALARM_SEND_SUCC);
-
- nsfw_mgr_msg_free (req_msg);
-
- return 0;
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : alarm product common func
-********************************************************************/
-void
-ns_send_alarm_inner (enum_alarm_id alarm_id, void *para, int check_times,
- int check_state_flag)
-{
- alarm_data *alarm_value = NULL;
- alarm_result alarm_id_report;
- int alarm_idx;
- int alarm_loop;
- int temp_alarm_time_laps;
- int abnormal_alarm_flag = 0, normal_alarm_flag =
- 0, total_abnormal_alarm_flag = 0;
- int need_check_flag = check_state_flag;
- int ret = 0;
-
- if ((alarm_id <= 0) || (alarm_id >= ALARM_EVENT_MAX)
- || (0 == g_alarm_data[alarm_id].valid_flag))
- {
- NSAM_LOGERR ("alarm_id is invalid or not reg");
- return;
- }
-
- alarm_id_report.alarm_id_get = ALARM_EVENT_MAX;
-
- alarm_idx = alarm_id;
-
- alarm_value = &g_alarm_data[alarm_idx];
-
- for (alarm_loop = 0; alarm_loop < alarm_value->alarm_reason_cnt;
- alarm_loop++)
- {
- abnormal_alarm_flag = 0;
- if (ALARM_PERIOD_CHECK == alarm_value->_alarm_type)
- {
- if (NULL ==
- alarm_value->_alarm_para.func_alarm_check_period[alarm_loop])
- {
- NSAM_LOGERR ("alarm id func_alarm_check is invalid]alarm_id=%d",
- alarm_id);
- return;
- }
- alarm_id_report =
- alarm_value->_alarm_para.func_alarm_check_period[alarm_loop] ();
- }
- else if (ALARM_SEND_ONCE == alarm_value->_alarm_type)
- {
- if (NULL == alarm_value->_alarm_para.func_alarm_check[alarm_loop])
- {
- NSAM_LOGERR ("alarm id func_alarm_check is invalid]alarm_id=%d",
- alarm_id);
- return;
- }
- alarm_id_report =
- alarm_value->_alarm_para.func_alarm_check[alarm_loop] (para);
- }
-
- if ((alarm_id_report.alarm_id_get <= ALARM_EVENT_BASE)
- || alarm_id_report.alarm_id_get >= ALARM_EVENT_MAX)
- {
- NSAM_LOGDBG ("don't satisfy alarm condition");
- return;
- }
-
- alarm_idx = alarm_id_report.alarm_id_get;
-
- if (ALARM_EVENT_NSTACK_MAIN_ABNORMAL == alarm_idx)
- {
- need_check_flag = 0;
- }
- /* for send current status alarm, needn't check count also status. */
- /* for sending current state alarm, needn't check current state */
- if ((alarm_id_report.alarm_flag_get == ALARM_PRODUCT)
- && (((alarm_value->alarm_time_laps[alarm_loop] < check_times)
- && (alarm_value->_alarm_flag != ALARM_PRODUCT))
- || (need_check_flag == 0)))
- {
- if ((0 == check_state_flag)
- || ++(alarm_value->alarm_time_laps[alarm_loop]) >= check_times)
- {
- alarm_value->_alarm_flag = ALARM_PRODUCT;
- abnormal_alarm_flag = 1;
- total_abnormal_alarm_flag++;
- }
-
- }
- else if ((alarm_id_report.alarm_flag_get == ALARM_CLEAN)
- && ((alarm_value->_alarm_flag == ALARM_PRODUCT)
- || (need_check_flag == 0)))
- {
- if ((1 == check_state_flag)
- && (alarm_value->alarm_time_laps[alarm_loop] > 0))
- {
- --alarm_value->alarm_time_laps[alarm_loop];
- }
- if ((alarm_value->alarm_time_laps[alarm_loop] <= 0)
- || (0 == check_state_flag))
- {
- normal_alarm_flag++;
- }
- }
-
- temp_alarm_time_laps = alarm_value->alarm_time_laps[alarm_loop];
-
- /* can't product same alarm multi times */
- /* only overload alarm can send */
- if (abnormal_alarm_flag != 1)
- {
- NSAM_LOGDBG
- ("don't satisfy alarm condition]alarm_idx=%d,alarm_time_laps=%d",
- alarm_idx, temp_alarm_time_laps);
- continue;
- }
-
- ret = ns_send_alarm_to_alarm_module (alarm_id_report);
-
- if (-1 == ret)
- {
- ns_alarm_set_sendFlag (alarm_id, ALARM_SEND_FAIL);
- }
- else
- {
- ns_alarm_set_sendFlag (alarm_id, ALARM_SEND_SUCC);
- }
- /* for alarm current status, only can send one */
- /* if it have multi-scearo, only can send a overload alarm */
- if (0 == need_check_flag)
- {
- break;
- }
-
- }
-
- if ((total_abnormal_alarm_flag == 0)
- && (alarm_value->alarm_reason_cnt == normal_alarm_flag))
- {
- alarm_value->_alarm_flag = ALARM_CLEAN;
- ret = ns_send_alarm_to_alarm_module (alarm_id_report);
- if (-1 == ret)
- {
- ns_alarm_set_sendFlag (alarm_id, ALARM_SEND_FAIL);
- }
- else
- {
- ns_alarm_set_sendFlag (alarm_id, ALARM_SEND_SUCC);
- }
- }
-
- return;
-
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : API, any app want to product alarm,need call this function
-********************************************************************/
-void
-ns_send_alarm (enum_alarm_id alarm_id, void *para)
-{
- ns_send_alarm_inner (alarm_id, para, 1, 1);
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : period check alarm expire handle function
-********************************************************************/
-int
-ns_alarm_timer_proc_fun (u32 timer_type, void *argv)
-{
- struct timespec time_left;
- if (NULL == argv)
- {
- NSAM_LOGERR ("abnormal: argv is NULL ");
- return -1;
- }
-
- alarm_data *alarm_value = (alarm_data *) argv;
-
- if (alarm_value->_alarm_type == ALARM_PERIOD_CHECK)
- {
- ns_send_alarm_inner (alarm_value->_alarm_id, NULL,
- ALARM_PERIOD_CHECK_TIMES, 1);
- time_left.tv_sec = alarm_value->_alarm_para.period_alarm.time_length;
- time_left.tv_nsec = 0;
- nsfw_timer_info *timer_info =
- nsfw_timer_reg_timer (0, (void *) (u64) alarm_value,
- ns_alarm_timer_proc_fun, time_left);
- if (NULL == timer_info)
- {
- NSAM_LOGERR ("nsfw_timer_reg_timer fail");
- return -1;
- }
- }
- NSAM_LOGDBG ("abnormal: alarm is not period ");
-
- return 0;
-
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : app reg alarm info to alarm module
-********************************************************************/
-int
-ns_reg_alarm (enum_alarm_id alarm_id, alarm_type alarmType,
- alarm_para * alarmPara)
-{
- alarm_data *alarm_value = NULL;
- alarm_reason loop = ALARM_REASON_BEGIN;
- struct timespec time_left;
-
- if ((alarm_id <= ALARM_EVENT_BASE) || (alarm_id >= ALARM_EVENT_MAX)
- || (NULL == alarmPara)
- || (alarmPara->alarm_reason_count > ALARM_REASON_MAX))
- {
- NSAM_LOGERR ("para invalid]alarm_id=%d ", alarm_id);
- return -1;
- }
-
- for (loop = ALARM_REASON_BEGIN; loop < alarmPara->alarm_reason_count;
- loop++)
- {
- if (NULL == alarmPara->func_alarm_check[loop])
- {
- NSAM_LOGERR ("para invalid]func_alarm_check=NULL,loop=%d", loop);
- return -1;
- }
- }
-
- alarm_value = &g_alarm_data[alarm_id];
- alarm_value->_alarm_type = alarmType;
- alarm_value->_alarm_para.period_alarm.time_length =
- alarmPara->period_alarm.time_length;
- alarm_value->_alarm_id = alarm_id;
- alarm_value->alarm_reason_cnt = alarmPara->alarm_reason_count;
- alarm_value->_alarm_flag = ALARM_CLEAN;
-
- for (loop = ALARM_REASON_BEGIN; loop < alarmPara->alarm_reason_count;
- loop++)
- {
- alarm_value->alarm_time_laps[loop] = alarmPara->alarm_reason_set[loop];
- alarm_value->_alarm_para.func_alarm_check[loop] =
- alarmPara->func_alarm_check[loop];
- alarm_value->_alarm_para.func_alarm_check_period[loop] =
- alarmPara->func_alarm_check_period[loop];
- alarm_value->alarm_time_laps[loop] = 0;
- }
-
- alarm_value->valid_flag = 1;
-
- if (ALARM_PERIOD_CHECK == alarmType)
- {
- time_left.tv_sec = alarm_value->_alarm_para.period_alarm.time_length;
- time_left.tv_nsec = 0;
- nsfw_timer_info *timer_info =
- nsfw_timer_reg_timer (0, (void *) (u64) alarm_value,
- ns_alarm_timer_proc_fun, time_left);
- if (NULL == timer_info)
- {
- NSAM_LOGERR ("nsfw_timer_reg_timer fail");
- }
- }
-
- return 0;
-}
-
-/*******************************************************************
-* Copyright 2017, Huawei Tech. Co., Ltd.
-* ALL RIGHTS RESERVED
-*Description : send alarm as per current state
-********************************************************************/
-void
-ns_send_init_alarm (enum_alarm_id alarm_id)
-{
- if ((alarm_id <= 0) || (alarm_id >= ALARM_EVENT_MAX))
- {
- NSAM_LOGDBG ("alarm_id is invalid");
- return;
- }
- ns_send_alarm_inner (alarm_id,
- (void *) (g_alarm_data[alarm_id]._alarm_flag), 1, 0);
-}
-
-NSFW_MODULE_NAME (NSFW_ALARM_MODULE)
-NSFW_MODULE_PRIORITY (10)
-NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE)
-NSFW_MODULE_INIT (ns_alarm_module_init)
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif /* __cplusplus */
diff --git a/stacks/lwip_stack/src/alarm/alarm.h b/stacks/lwip_stack/src/alarm/alarm.h
deleted file mode 100644
index 4c5f692..0000000
--- a/stacks/lwip_stack/src/alarm/alarm.h
+++ /dev/null
@@ -1,80 +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.
-*/
-
-#ifndef _ALARM_H_
-#define _ALARM_H_
-
-#include <stdint.h>
-#include "alarm_api.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/* alarm clean time = 1*3 */
-
-#define ALARM_RESEND_TIMER_LENGTH 60
-#define ALARM_INIT_RESEND_TIMER_LENGTH 40
-
-#define ALARM_SEND_SUCC 1
-#define ALARM_SEND_FAIL 0
-
-#define ALARM_PARA_LENGTH_OUTER 2048
-
-#define ALARM_PERIOD_CHECK_TIMES 3
-
-#define MAX_VMID_LEN 256
-
-#define MIN_VM_ID_LEN 1
-#define MAX_VM_ID_LEN 256
-
-#define INVALID_STR_LEN(_str, _min_len, _maxlen) (NULL == _str || strlen(_str) < _min_len || strlen(_str) > _maxlen)
-
-typedef struct _alarm_data
-{
- alarm_para _alarm_para;
- alarm_type _alarm_type;
- enum_alarm_id _alarm_id;
- int alarm_time_laps[ALARM_REASON_MAX];
- alarm_flag _alarm_flag;
- int alarm_reason_cnt;
- int valid_flag;
- int send_succ_flag;
-
-} alarm_data;
-
-typedef struct _alarm_info_s_out
-{
- char alarmId[16];
- char comptentname[32];
- char alarmtime[32];
- char alarmcontent[ALARM_PARA_LENGTH_OUTER];
-} alarm_info_s_out;
-
-int ns_send_alarm_to_alarm_module (alarm_result alarm_res);
-
-void ns_send_alarm_inner (enum_alarm_id alarm_id, void *para, int check_times,
- int check_state_flag);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/alarm/alarm_api.h b/stacks/lwip_stack/src/alarm/alarm_api.h
deleted file mode 100644
index 8c7aca1..0000000
--- a/stacks/lwip_stack/src/alarm/alarm_api.h
+++ /dev/null
@@ -1,107 +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.
-*/
-
-#ifndef _ALARM_API_H_
-#define _ALARM_API_H_
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define NSFW_ALARM_MODULE "nstack_alarm"
-
-/* alarm ID for every event, when need add new alarm, here add a alarm_id define */
-typedef enum _alarm_id
-{
- ALARM_EVENT_BASE,
- ALARM_EVENT_NSTACK_RESOURCE_ALARM,
- ALARM_EVENT_NSTACK_NO_USE,
- ALARM_EVENT_NSTACK_MAIN_ABNORMAL,
- ALARM_EVENT_MAX
-} enum_alarm_id;
-
-/* support both type alarm:
- 1. support other module call func:ns_send_alarm to product alarm;
- 2. alarm module call function periodly to check whether need product alarm */
-typedef enum _alarm_type
-{
- ALARM_PERIOD_CHECK,
- ALARM_SEND_ONCE
-} alarm_type;
-
-typedef enum _alarm_flag
-{
- ALARM_PRODUCT,
- ALARM_CLEAN,
- ALARM_MAX
-} alarm_flag;
-
-typedef enum _alarm_reason
-{
- ALARM_REASON_BEGIN,
- ALARM_REASON_SOCKET = 0,
- ALARM_REASON_MSG_BUF,
- ALARM_REASON_NSMAIN,
- ALARM_REASON_MAX
-} alarm_reason;
-
-typedef struct _alarm_result
-{
- enum_alarm_id alarm_id_get;
- alarm_reason alarm_reason_get;
- alarm_flag alarm_flag_get;
-} alarm_result;
-
-/* check whether need product alarm,if return 0, then product alarm */
-typedef alarm_result (*alarm_check_func) (void *para);
-typedef alarm_result (*alarm_check_func_period) (void);
-
-typedef struct _alarm_para
-{
- union
- {
- int time_length;
- } period_alarm;
- union
- {
- alarm_check_func func_alarm_check[ALARM_REASON_MAX];
- alarm_check_func_period func_alarm_check_period[ALARM_REASON_MAX];
- };
-
- alarm_reason alarm_reason_set[ALARM_REASON_MAX];
- int alarm_reason_count;
-
-} alarm_para;
-
-/* for any alarm added, firstly call following function to reg */
-int ns_reg_alarm (enum_alarm_id alarm_id, alarm_type _alarm_type,
- alarm_para * _alarm_para);
-
-void ns_send_init_alarm (enum_alarm_id alarm_id);
-
-/* other module call this func to product alarm, here para is same as alarm_check_func's para */
-void ns_send_alarm (enum_alarm_id alarm_id, void *para);
-int ns_alarm_module_init (void *param);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/include/nsfw_msg.h b/stacks/lwip_stack/src/include/nsfw_msg.h
deleted file mode 100644
index e5254d3..0000000
--- a/stacks/lwip_stack/src/include/nsfw_msg.h
+++ /dev/null
@@ -1,203 +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.
-*/
-
-#ifndef MSG_H
-#define MSG_H
-#include "types.h"
-#include "common_mem_api.h"
-#include "nsfw_rti.h"
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define MAX_MSG_SIZE 512
-COMPAT_PROTECT (MAX_MSG_SIZE, 512);
-#define MAX_MSG_PARAM_SIZE 128
-COMPAT_PROTECT (MAX_MSG_PARAM_SIZE, 128);
-
-#define MSG_ASYN_POST 0
-#define MSG_SYN_POST 1
-
-typedef struct
-{
- u16 module_type;
- u16 major_type;
- u16 minor_type;
- u16 op_type; /* MSG_SYN_POST or MSG_ASYN_POST */
- sys_sem_st op_completed;
- i32 err;
- PRIMARY_ADDR void *msg_from; /* use it to free msg */
- i64 receiver;
- i64 comm_receiver;
- nsfw_res res_chk;
- u32 src_pid;
- u32 recycle_pid; /* use it in recycle */
- u64 span_pid;
- i64 extend_member_bit;
-} msg_param;
-
-typedef struct msg_t
-{
- msg_param param;
- i8 msg_param_pad[MAX_MSG_PARAM_SIZE - sizeof (msg_param)]; /* sizeof(msg_param) + sizeof(msg_param_pad) = MAX_MSG_PARAM_SIZE */
- i64 buffer[(MAX_MSG_SIZE - MAX_MSG_PARAM_SIZE) / 8];
-}
-data_com_msg;
-
-#define MAX_MODULE_TYPE 64
-#define MAX_MAJOR_TYPE 256
-#define MAX_MINOR_TYPE 256
-
-struct rti_queue
-{
- /* corresponding to enum spl_tcpip_msg_type */
- volatile u64 tcpip_msg_enq[MAX_MAJOR_TYPE];
- volatile u64 tcpip_msg_enq_fail[MAX_MAJOR_TYPE];
- u64 tcpip_msg_deq[MAX_MAJOR_TYPE];
-
- /* corresponding to enum api_msg_type, this is sub-type of SPL_TCPIP_NEW_MSG_API */
- volatile u64 api_msg_enq[MAX_MINOR_TYPE];
- volatile u64 api_msg_enq_fail[MAX_MINOR_TYPE];
- u64 api_msg_deq[MAX_MINOR_TYPE];
-
- u64 extend_member_bit;
-};
-
-enum MSG_MODULE_TYPE
-{
- MSG_MODULE_IP,
- MSG_MODULE_SBR,
- MSG_MODULE_HAL,
- MSG_MODULE_SPL,
- MSG_MODULE_TIMER,
- MSG_MODULE_MT,
- MSG_MODULE_DFX,
- MSG_MODULE_MAX = MAX_MODULE_TYPE
-};
-
-typedef int (*msg_fun) (data_com_msg * m);
-
-/* *INDENT-OFF* */
-extern msg_fun g_msg_module_fun_array[MAX_MODULE_TYPE];
-extern msg_fun g_msg_module_major_fun_array[MAX_MODULE_TYPE][MAX_MAJOR_TYPE];
-extern msg_fun g_msg_module_major_minor_fun_array[MAX_MODULE_TYPE][MAX_MAJOR_TYPE][MAX_MINOR_TYPE];
-extern msg_fun g_msg_unsupport_fun;
-/* *INDENT-ON* */
-
-#define REGIST_MSG_MODULE_FUN(module, fun) \
- static void regist_ ## module ## _function (void) \
- __attribute__((__constructor__)); \
- static void regist_ ## module ## _function (void) \
- { \
- g_msg_module_fun_array[module] = fun; \
- } \
-
-#define REGIST_MSG_MODULE_MAJOR_FUN(module, major, fun) \
- static void regist_ ## module ## major ## _function (void) \
- __attribute__((__constructor__)); \
- static void regist_ ## module ## major ## _function (void) \
- { \
- g_msg_module_major_fun_array[module][major] = fun; \
- } \
-
-#define REGIST_MSG_MODULE_MAJOR_MINOR_FUN(module, major, minor, fun) \
- static void regist_ ## module ## major ## minor ## _function (void) \
- __attribute__((__constructor__)); \
- static void regist_ ## module ## major ## minor ## _function (void) \
- { \
- g_msg_module_major_minor_fun_array[module][major][minor] = fun; \
- } \
-
-#define REGIST_MSG_UNSUPPORT_FUN(fun) \
- static void regist_msg_unsupport_function (void) \
- __attribute__((__constructor__)); \
- static void regist_msg_unsupport_function (void) \
- { \
- g_msg_unsupport_fun = fun; \
- }
-
-static inline int
-unsupport_msg (data_com_msg * m)
-{
- if (g_msg_unsupport_fun)
- {
- return g_msg_unsupport_fun (m);
- }
-
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : call_msg_fun
-* Description : call msg fun
-* Input : data_com_msg* m
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-call_msg_fun (data_com_msg * m)
-{
- u16 module = m->param.module_type;
- u16 major = m->param.major_type;
- u16 minor = m->param.minor_type;
-
- if ((module >= MAX_MODULE_TYPE) || (major >= MAX_MAJOR_TYPE)
- || (minor >= MAX_MINOR_TYPE))
- {
- return unsupport_msg (m);
- }
-
- nsfw_rti_stat_macro (NSFW_STAT_PRIMARY_DEQ, m);
-
- if (g_msg_module_fun_array[module]
- && (g_msg_module_fun_array[module] (m) != 0))
- {
- return -1;
- }
-
- if (g_msg_module_major_fun_array[module][major]
- && (g_msg_module_major_fun_array[module][major] (m) != 0))
- {
- return -1;
- }
-
- if (g_msg_module_major_minor_fun_array[module][major][minor])
- {
- return g_msg_module_major_minor_fun_array[module][major][minor] (m);
- }
-
- if (!g_msg_module_fun_array[module]
- && !g_msg_module_major_fun_array[module][major]
- && !g_msg_module_major_minor_fun_array[module][major][minor])
- {
- return unsupport_msg (m);
- }
-
- return 0;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/include/nsfw_msg_api.h b/stacks/lwip_stack/src/include/nsfw_msg_api.h
deleted file mode 100644
index 85dca49..0000000
--- a/stacks/lwip_stack/src/include/nsfw_msg_api.h
+++ /dev/null
@@ -1,309 +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.
-*/
-
-#ifndef MSG_API_H
-#define MSG_API_H
-#include "nsfw_msg.h"
-#include "nsfw_mem_api.h"
-#include "nstack_log.h"
-#include "nsfw_rti.h"
-#include "common_mem_api.h"
-#include "nsfw_recycle_api.h"
-#include "common_pal_bitwide_adjust.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define SET_MSG_ERR(m, error) ((m)->param.err = (error))
-#define GET_MSG_ERR(m) ((m)->param.err)
-
-/* for sync message from sbr we should signal sem */
-#define SYNC_MSG_ACK(m) sys_sem_s_signal(&((m)->param.op_completed))
-
-/* for async message from sbr we should free the message */
-#define ASYNC_MSG_FREE(m) msg_free(m)
-
-#define MSG_ENTRY(_ptr, _type, _member) container_of((void *)_ptr, _type, _member)
-
-#ifndef NSTACK_STATIC_CHECK
-/*****************************************************************************
-* Prototype : msg_malloc
-* Description : malloc msg
-* Input : mring_handle mhandle
-* Output : None
-* Return Value : static inline data_com_msg*
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline data_com_msg *
-msg_malloc (mring_handle mhandle)
-{
- if (!mhandle)
- {
- NSFW_LOGERR ("mhandle is null");
- return NULL;
- }
-
- data_com_msg *m = NULL;
- if (nsfw_mem_ring_dequeue (mhandle, (void **) &m) != 1)
- {
- return NULL;
- }
-
- m->param.recycle_pid = get_sys_pid ();
- res_alloc (&m->param.res_chk);
- return m;
-}
-
-/*****************************************************************************
-* Prototype : msg_free
-* Description : free msg
-* Input : data_com_msg* m
-* mring_handle mhandle
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline void
-msg_free (data_com_msg * m)
-{
- if (!m)
- {
- NSFW_LOGERR ("m is NULL");
- return;
- }
-
- mring_handle mhandle = ADDR_SHTOL (m->param.msg_from);
- if (!mhandle)
- {
- return;
- }
-
- if (res_free (&m->param.res_chk))
- {
- NSFW_LOGERR ("m refree!]m=%p", m);
- return;
- }
-
- m->param.recycle_pid = 0;
-
- if (nsfw_mem_ring_enqueue (mhandle, (void *) m) != 1)
- {
- NSFW_LOGERR ("nsfw_mem_ring_enqueue failed,this can not happen");
- }
-}
-
-/*****************************************************************************
-* Prototype : msg_post
-* Description : post msg
-* Input : data_com_msg* m
-* mring_handle mhandle
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline int
-msg_post (data_com_msg * m, mring_handle mhandle)
-{
- int ret;
- if (!m || !mhandle)
- {
- NSFW_LOGERR ("param is not ok]m=%p,mhandle=%p", m, mhandle);
- return -1;
- }
-
- while (1)
- {
- ret = nsfw_mem_ring_enqueue (mhandle, (void *) m);
- switch (ret)
- {
- case 1:
- if (MSG_SYN_POST == m->param.op_type)
- {
- sys_arch_sem_s_wait (&m->param.op_completed, 0);
- }
-
- return 0;
- case 0:
- continue;
- default:
- nsfw_rti_stat_macro (NSFW_STAT_PRIMARY_ENQ_FAIL, m);
- return -1;
- }
- }
-}
-
-#define MSG_POST_FAILED 50
-/*****************************************************************************
-* Prototype : msg_post_with_lock_rel
-* Description : post msg to tcpip thread in mgrcom thread
-* Input : data_com_msg* m
-* mring_handle mhandle
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline int
-msg_post_with_lock_rel (data_com_msg * m, mring_handle mhandle)
-{
- int ret;
- int try_count = 0;
- if (!m || !mhandle)
- {
- NSFW_LOGERR ("param is not ok]m=%p,mhandle=%p", m, mhandle);
- return -1;
- }
-
- while (1)
- {
- ret = nsfw_mem_ring_enqueue (mhandle, (void *) m);
- switch (ret)
- {
- case 1:
- if (MSG_SYN_POST == m->param.op_type)
- {
- sys_arch_sem_s_wait (&m->param.op_completed, 0);
- }
-
- return 0;
- case 0:
- try_count++;
- if (try_count > MSG_POST_FAILED)
- {
- try_count = 0;
- nsfw_recycle_rechk_lock ();
- }
- sys_sleep_ns (0, 1000000);
- continue;
- default:
- nsfw_rti_stat_macro (NSFW_STAT_PRIMARY_ENQ_FAIL, m);
- return -1;
- }
- }
-}
-
-/*****************************************************************************
-* Prototype : msg_try_post
-* Description : try post msg
-* Input : data_com_msg* m
-* mring_handle mhandle
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline int
-msg_try_post (data_com_msg * m, mring_handle mhandle)
-{
- if (!m || !mhandle)
- {
- NSFW_LOGERR ("param is not ok]m=%p,mhandle=%p", m, mhandle);
- return -1;
- }
-
- int ret = nsfw_mem_ring_enqueue (mhandle, (void *) m);
- if (1 == ret)
- {
- if (MSG_SYN_POST == m->param.op_type)
- {
- sys_arch_sem_s_wait (&m->param.op_completed, 0);
- }
-
- return 0;
- }
-
- return -1;
-}
-
-/*****************************************************************************
-* Prototype : msg_fetch
-* Description : fetch msg
-* Input : mring_handle mhandle
-* data_com_msg** m
-* u32 num
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline int
-msg_fetch (mring_handle mhandle, data_com_msg ** m, u32 num)
-{
- if (!m || !mhandle)
- {
- NSFW_LOGERR ("param is not ok]m=%p,mhandle=%p", m, mhandle);
- return -1;
- }
-
- int ret;
- while (1)
- {
- ret = nsfw_mem_ring_dequeuev (mhandle, (void *) m, num);
- if (ret > 0)
- {
- break;
- }
- }
-
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : msg_try_fetch
-* Description : try fetch msg
-* Input : mring_handle mhandle
-* data_com_msg** m
-* u32 num
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*****************************************************************************/
-static inline int
-msg_try_fetch (mring_handle mhandle, data_com_msg ** m, u32 num)
-{
- if (!m || !mhandle)
- {
- NSFW_LOGERR ("param is not ok]m=%p,mhandle=%p", m, mhandle);
- return -1;
- }
-
- return nsfw_mem_ring_dequeuev (mhandle, (void *) m, num);
-}
-
-#else
-data_com_msg *msg_malloc (mring_handle mhandle);
-void msg_free (data_com_msg * m);
-int msg_post (data_com_msg * m, mring_handle mhandle);
-int msg_try_post (data_com_msg * m, mring_handle mhandle);
-int msg_fetch (mring_handle mhandle, data_com_msg ** m, u32 num);
-int msg_try_fetch (mring_handle mhandle, data_com_msg ** m, u32 num);
-int msg_post_with_lock_rel (data_com_msg * m, mring_handle mhandle);
-#endif
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/include/nsfw_mt_config.h b/stacks/lwip_stack/src/include/nsfw_mt_config.h
deleted file mode 100644
index e1a7899..0000000
--- a/stacks/lwip_stack/src/include/nsfw_mt_config.h
+++ /dev/null
@@ -1,292 +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.
-*/
-
-#ifndef _FW_MT_CONFIG_H
-#define _FW_MT_CONFIG_H
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define NSFW_CONFIG_MODULE "nsfw_config"
-#define NSTACK_SHARE_CONFIG "nstack_share_config"
-
-#define CFG_PATH "NSTACK_CONFIG_PATH"
-#define CFG_FILE_NAME "nStackConfig.json"
-#define MAX_FILE_NAME_LEN 512
-#define CFG_BUFFER_LEN 2048
-#define MAX_CFG_ITEM 128
-#define CFG_ITEM_LENGTH 64
-
-enum NSTACK_BASE_CFG
-{
- CFG_BASE_SOCKET_NUM = 0,
- CFG_BASE_RING_SIZE,
- CFG_BASE_HAL_PORT_NUM,
- CFG_BASE_ARP_STALE_TIME,
- CFG_BASE_ARP_BC_RETRANS_NUM,
- MAX_BASE_CFG
-};
-COMPAT_PROTECT (MAX_BASE_CFG, 5);
-
-enum NSTACK_CUSTOM_CFG
-{
- /* mBuf config */
- CFG_MBUF_DATA_SIZE,
- CFG_TX_MBUF_NUM,
- CFG_RX_MBUF_NUM,
-
- /* memory pool config */
- CFG_MP_TCPSEG_NUM,
- CFG_MP_MSG_NUM,
-
- /* RING config */
- CFG_HAL_TX_RING_SIZE,
- CFG_HAL_RX_RING_SIZE,
- CFG_MBOX_RING_SIZE,
- CFG_SPL_MAX_RING_SIZE,
-
- /* PCB config */
- CFG_TCP_PCB_NUM,
- CFG_UDP_PCB_NUM,
- CFG_RAW_PCB_NUM,
-
- CFG_ARP_QUEUE_NUM,
-
- MAX_CUSTOM_CFG
-};
-COMPAT_PROTECT (CFG_SPL_MAX_RING_SIZE, 8);
-
-enum EN_CFG_SEG
-{
- CFG_SEG_BASE = 0,
- CFG_SEG_LOG,
- CFG_SEG_PATH,
- CFG_SEG_PRI,
- CFG_SEG_MAX
-};
-
-enum EN_CFG_ITEM_TYPE
-{
- CFG_ITEM_TYPE_INT = 0,
- CFG_ITEM_TYPE_STRING
-};
-
-enum EN_SEG_BASE_ITEM
-{
- CFG_SEG_BASE_SOCKET_NUM = 0,
- CFG_SEG_BASE_ARP_STALE_TIME,
- CFG_SEG_BASE_ARP_BC_RETRANS_NUM,
- CFG_SEG_BASE_MAX
-};
-
-enum EN_SEG_THREAD_PRI_ITEM
-{
- CFG_SEG_THREAD_PRI_POLICY = 0,
- CFG_SEG_THREAD_PRI_PRI,
- CFG_SEG_THREAD_PRI_MAX
-};
-
-typedef void (*custom_check_fn) (void *pitem);
-
-// pack size?
-struct cfg_item_info
-{
- char *name;
- int type;
- int min_value;
- int max_value;
- int default_value;
- char *default_str;
- custom_check_fn custom_check;
- union
- {
- int value;
- char *pvalue;
- };
-};
-
-typedef struct _cfg_module_param
-{
- u32 proc_type;
- i32 argc;
- u8 **argv;
-} cfg_module_param;
-
-extern u32 g_custom_cfg_items[MAX_CUSTOM_CFG];
-extern u32 g_base_cfg_items[MAX_BASE_CFG];
-
-#define get_base_cfg(tag) g_base_cfg_items[(tag)]
-#define get_custom_cfg(tag) g_custom_cfg_items[(tag)]
-#define set_custom_cfg_item(tag, value) g_custom_cfg_items[(tag)] = (value)
-
-/* stackx config data definition */
-
-/* app socket num */
-#define DEF_APP_SOCKET_NUM 1024
-
-/* socket num config */
-#define SOCKET_NUM_PER_THREAD 1024 /* socket number per thread */
-COMPAT_PROTECT (SOCKET_NUM_PER_THREAD, 1024);
-
-/*
- MAX_SOCKET_NUM: max socket fd number one app can use, it should equal the max socket
- number nstack support(CUR_CFG_SOCKET_NUM)
-*/
-
-#define DEF_SOCKET_NUM 1024 /* default socket number */
-COMPAT_PROTECT (DEF_SOCKET_NUM, 1024);
-#define MIN_SOCKET_NUM 1024 /* min socket number */
-
-#define MAX_SOCKET_NUM 8192 /* default: 8K sockets */
-
-#define CUR_CFG_SOCKET_NUM get_base_cfg(CFG_BASE_SOCKET_NUM) /* max socket numbere nstack support */
-
-#define DEF_ARP_STACLE_TIME 300 /* default arp stale time: second */
-#define MIN_ARP_STACLE_TIME 30 /* min arp stale time: second */
-#define MAX_ARP_STACLE_TIME 1200 /* max arp stale time: second */
-#define ARP_STALE_TIME get_base_cfg(CFG_BASE_ARP_STALE_TIME)
-
-#define DEF_ARP_BC_RETRANS_NUM 5 /* default arp broadcast retransmission times */
-#define MIN_ARP_BC_RETRANS_NUM 1 /* min arp broadcast retransmission times */
-#define MAX_ARP_BC_RETRANS_NUM 20 /* max arp broadcast retransmission times */
-#define ARP_BC_RETRANS_NUM get_base_cfg(CFG_BASE_ARP_BC_RETRANS_NUM)
-
-/* application mumber config */
-#define APP_POOL_NUM 32 /* max application number */
-COMPAT_PROTECT (APP_POOL_NUM, 32);
-
-/* thread number config */
-#define DEF_THREAD_NUM 1 /* default stackx thread number */
-#define MIN_THREAD_NUM 1 /* min thread number */
-#define MAX_THREAD_NUM 1 /* max thread number */
-COMPAT_PROTECT (MAX_THREAD_NUM, 1);
-
-/* hash size */
-#define MAX_TCP_HASH_SIZE 4096
-
-/* hal port number config */
-#define DEF_HAL_PORT_NUM 20 /* port number */
-COMPAT_PROTECT (DEF_HAL_PORT_NUM, 20);
-#define MIN_HAL_PORT_NUM 1
-#define MAX_HAL_PORT_NUM 255
-#define CUR_CFG_HAL_PORT_NUM get_base_cfg(CFG_BASE_HAL_PORT_NUM)
-
-/* vm number config */
-#define MAX_VF_NUM 4 /* max vf number */
-COMPAT_PROTECT (MAX_VF_NUM, 4);
-
-/* base ring size config */
-#define DEF_RING_BASE_SIZE 2048 /* base ring size */
-COMPAT_PROTECT (DEF_RING_BASE_SIZE, 2048);
-#define MIN_RING_BASE_SIZE 1024
-#define MAX_RING_BASE_SIZE 4096
-#define POOL_RING_BASE_SIZE get_base_cfg(CFG_BASE_RING_SIZE)
-
-/* mbuf data size config */
-#define DEF_MBUF_DATA_SIZE 2048 /* mbuf data size */
-COMPAT_PROTECT (DEF_MBUF_DATA_SIZE, 2048);
-#define TX_MBUF_MAX_LEN get_custom_cfg(CFG_MBUF_DATA_SIZE)
-
-/* tx mbuf pool size config */
-#define DEF_TX_MBUF_POOL_SIZE (4*POOL_RING_BASE_SIZE) /* tx mbuf pool size */
-
-#define TX_MBUF_POOL_SIZE get_custom_cfg(CFG_TX_MBUF_NUM)
-
-/* rx mbuf pool size config */
-#define DEF_RX_MBUF_POOL_SIZE (8*POOL_RING_BASE_SIZE) /* rx mbuf pool size */
-
-#define RX_MBUF_POOL_SIZE get_custom_cfg(CFG_RX_MBUF_NUM)
-
-/* hal netif rx/tx ring size config */
-#define DEF_HAL_RX_RING_SIZE 2048 /* hal rx ring size */
-
-#define DEF_HAL_TX_RING_SIZE 2048 /* hal tx ring size */
-#define HAL_RX_RING_SIZE get_custom_cfg(CFG_HAL_RX_RING_SIZE)
-#define HAL_TX_RING_SIZE get_custom_cfg(CFG_HAL_TX_RING_SIZE)
-
-/* stackx recv ring size config */
-#define DEF_SPL_MAX_RING_SIZE 1024
-COMPAT_PROTECT (DEF_SPL_MAX_RING_SIZE, 1024);
-
-#define SPL_MAX_RING_SIZE get_custom_cfg(CFG_SPL_MAX_RING_SIZE) /* ring size config, used in recv ring(per socket) */
-
-/* pcb number config */
-#define DEF_TCP_PCB_NUM 4096 /* tcp pcb number, per thread */
-COMPAT_PROTECT (DEF_TCP_PCB_NUM, 4096);
-#define DEF_UDP_PCB_NUM 512 /* udp pcb number, per thread */
-COMPAT_PROTECT (DEF_UDP_PCB_NUM, 512);
-#define DEF_RAW_PCB_NUM 600 /* raw pcb number, per thread */
-COMPAT_PROTECT (DEF_RAW_PCB_NUM, 600);
-
-#define DEF_ARP_QUEUE_NUM 300
-#define LARGE_ARP_QUEUE_NUM (512*1024)
-
-#define SPL_MEMP_NUM_TCP_PCB get_custom_cfg(CFG_TCP_PCB_NUM)
-
-#define SPL_MEMP_NUM_UDP_PCB get_custom_cfg(CFG_UDP_PCB_NUM)
-#define SPL_MEMP_NUM_RAW_PCB get_custom_cfg(CFG_RAW_PCB_NUM)
-
-#define SPL_MEMP_NUM_ARP_QUEUE get_custom_cfg(CFG_ARP_QUEUE_NUM)
-
-/* tcp seg number config */
-#define DEF_MEMP_NUM_TCP_SEG (2*APP_POOL_NUM*DEF_TX_MBUF_POOL_SIZE)
-#define SPL_MEMP_NUM_TCP_SEG get_custom_cfg(CFG_MP_TCPSEG_NUM) /* tcp segment number, per thread */
-
-/* stackx internal msg number config */
-#define DEF_TX_MSG_POOL_SIZE (DEF_TX_MBUF_POOL_SIZE*APP_POOL_NUM + MAX_VF_NUM*DEF_RX_MBUF_POOL_SIZE + DEF_RING_BASE_SIZE)
-
-#define TX_MSG_POOL_SIZE get_custom_cfg(CFG_MP_MSG_NUM) /* msg number, used by stackx internal, per thread */
-
-/* mbox ring size config */
-#define DEF_MBOX_RING_SIZE (DEF_RING_BASE_SIZE/4)
-COMPAT_PROTECT (DEF_MBOX_RING_SIZE, 512);
-
-#define MBOX_RING_SIZE get_custom_cfg(CFG_MBOX_RING_SIZE) /* mbox ring size config, per thread */
-
-/*some probem if CUSOTM_RECV_RING_SIZE more than 4096*/
-#define CUSOTM_RECV_RING_SIZE 4096
-COMPAT_PROTECT (CUSOTM_RECV_RING_SIZE, 4096);
-
-/*==============================================*
- * constants or macros define *
- *----------------------------------------------*/
-#define set_cfg_info(tag, item, min, max, def) { \
- g_cfg_item_info[tag][item].min_value = (min); \
- g_cfg_item_info[tag][item].max_value = (max); \
- g_cfg_item_info[tag][item].default_value = (def);\
- g_cfg_item_info[tag][item].value = (def);\
-}
-
-#define get_cfg_info(tag, item) g_cfg_item_info[tag][item].value
-
-u32 get_cfg_share_mem_size ();
-
-int get_share_cfg_from_mem (void *mem);
-
-int set_share_cfg_to_mem (void *mem);
-
-void config_module_init (cfg_module_param * param);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/include/nsfw_rti.h b/stacks/lwip_stack/src/include/nsfw_rti.h
deleted file mode 100644
index 6b81942..0000000
--- a/stacks/lwip_stack/src/include/nsfw_rti.h
+++ /dev/null
@@ -1,66 +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.
-*/
-
-#ifndef RTI_H
-#define RTI_H
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#define nsfw_rti_stat_macro(type, m) if (1 == g_dfx_switch) { nsfw_rti_stat(type, m); }
-
-typedef enum nsfw_rti_stat_type
-{
- NSFW_STAT_PRIMARY_ENQ,
- NSFW_STAT_PRIMARY_ENQ_FAIL,
- NSFW_STAT_PRIMARY_DEQ,
-} nsfw_rti_stat_type_t;
-
-typedef struct nsfw_app_info
-{
- int nsocket_fd;
- int sbr_fd;
-
- int hostpid;
- int pid;
- int ppid;
-
- u64 reserve1;
- u64 reserve2;
- u64 reserve3;
- u64 reserve4;
-
- u64 extend_member_bit;
-} nsfw_app_info_t;
-
-struct rti_queue;
-struct msg_t;
-
-extern char g_dfx_switch;
-extern struct rti_queue *g_nsfw_rti_primary_stat;
-
-void nsfw_rti_stat (nsfw_rti_stat_type_t statType, const struct msg_t *m);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/io_adpt/CMakeLists.txt b/stacks/lwip_stack/src/io_adpt/CMakeLists.txt
deleted file mode 100644
index ae18116..0000000
--- a/stacks/lwip_stack/src/io_adpt/CMakeLists.txt
+++ /dev/null
@@ -1,31 +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.
-#########################################################################
-
-FILE(GLOB_RECURSE HAL *.c)
-
-if(WITH_HAL_LIB)
-else()
-endif()
-
-
-INCLUDE_DIRECTORIES(
- ./
- ${PROJECT_SOURCE_DIR}/src/include/
- ${PROJECT_SOURCE_DIR}/src/include/generic/
- /usr/include/dpdk/
-)
-LINK_LIBRARIES(m dl rt dmm_api)
-ADD_LIBRARY(nStackHal STATIC ${HAL})
diff --git a/stacks/lwip_stack/src/io_adpt/dpdk.c b/stacks/lwip_stack/src/io_adpt/dpdk.c
deleted file mode 100644
index 8518112..0000000
--- a/stacks/lwip_stack/src/io_adpt/dpdk.c
+++ /dev/null
@@ -1,2476 +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 <stdint.h>
-#include <sched.h>
-#include <dlfcn.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <sys/file.h>
-#include <pwd.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <fnmatch.h>
-#include <linux/ethtool.h>
-#include <linux/sockios.h>
-
-#include <rte_config.h>
-#include <rte_ethdev.h>
-#include <rte_mbuf.h>
-#include <rte_eth_bond.h>
-#include "nsfw_init.h"
-#include "common_mem_mbuf.h"
-#include "common_mem_mempool.h"
-#include "common_func.h"
-#include "hal.h"
-#include "nstack_securec.h"
-#include <rte_ethdev_driver.h>
-
-#define DPDK_NON_ROOT_USER_NAME "paas"
-#define DPDK_TOOL_ENV "DPDK_TOOL_DIR"
-#define DPDK_NIC_LIST_FILE "%s/ip_module/.nstack_dpdk_nic_list"
-#define SOCKET_ID_0 0
-
-NSTACK_STATIC struct passwd *dpdk_non_root_user;
-NSTACK_STATIC char dpdk_tool_path[HAL_MAX_PATH_LEN] = { 0 };
-
-/* Default configuration for rx and tx thresholds etc. */
-NSTACK_STATIC const struct rte_eth_rxconf rx_conf_default_igb = {
- .rx_thresh = {
- .pthresh = 8,
- .hthresh = 8,
- .wthresh = 1, //not bigger than 1
- },
-};
-
-/*
- * These default values are optimized for use with the Intel(R) 82576 1 GbE
- * Controller and the DPDK e1000 PMD. Consider using other values for other
- * network controllers and/or network drivers.
- */
-NSTACK_STATIC const struct rte_eth_txconf tx_conf_default_igb = {
- .tx_thresh = {
- .pthresh = 8,
- .hthresh = 1,
- .wthresh = 16,
- },
- .tx_free_thresh = 0, /* Use PMD default values */
- .tx_rs_thresh = 0, /* Use PMD default values */
-};
-
-/*
- * RX and TX Prefetch, Host, and Write-back threshold values should be
- * carefully set for optimal performance. Consult the network
- * controller's datasheet and supporting DPDK documentation for guidance
- * on how these parameters should be set.
- */
-
-/* Default configuration for rx and tx thresholds etc. */
-NSTACK_STATIC const struct rte_eth_rxconf rx_conf_default_ixgbe = {
- .rx_thresh = {
- .pthresh = 8,
- .hthresh = 8,
- .wthresh = 4,
- },
- .rx_free_thresh = 0,
-};
-
-/*
- * These default values are optimized for use with the Intel(R) 82599 10 GbE
- * Controller and the DPDK ixgbe PMD. Consider using other values for other
- * network controllers and/or network drivers.
- */
-NSTACK_STATIC const struct rte_eth_txconf tx_conf_default_ixgbe = {
- .tx_thresh = {
- .pthresh = 36,
- .hthresh = 0,
- .wthresh = 0,
- },
- .tx_free_thresh = 0, /* Use PMD default values */
- .tx_rs_thresh = 0, /* Use PMD default values */
- .txq_flags = 0,
-};
-
-/* the port configuration of normal port */
-NSTACK_STATIC struct rte_eth_conf port_conf_default_normal = {
- .rxmode = {
- .mq_mode = ETH_RSS,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0,
- .hw_ip_checksum = 1,
- .hw_vlan_filter = 1,
- .hw_vlan_strip = 1,
- .jumbo_frame = 0,
- .hw_strip_crc = 0,
- },
- .rx_adv_conf = {
- .rss_conf = {
- .rss_key = NULL,
- .rss_hf = (ETH_RSS_IPV4 | ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV4_UDP), //rss hash key
- },
- },
- .txmode = {
- .mq_mode = ETH_DCB_NONE,
- },
- .intr_conf = {
- .lsc = 0,
- },
-};
-
-/* the port configuration of virtio port */
-NSTACK_STATIC struct rte_eth_conf port_conf_default_virtio = {
- .rxmode = {
- .mq_mode = ETH_RSS,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0,
- .hw_ip_checksum = 0, /* Virtio NIC doesn't support HW IP CheckSUM */
- .hw_vlan_filter = 1,
- .hw_vlan_strip = 1,
- .jumbo_frame = 0,
- .hw_strip_crc = 0,
- },
- .rx_adv_conf = {
- .rss_conf = {
- .rss_key = NULL,
- .rss_hf = (ETH_RSS_IPV4 | ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV4_UDP), //rss hash key
- },
- },
- .txmode = {
- .mq_mode = ETH_DCB_NONE,
- },
- .intr_conf = {
- .lsc = 0,
- },
-};
-
-/* the port configuration of bond port */
-NSTACK_STATIC struct rte_eth_conf port_conf_default_bond = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0,
- /**< Header Split disabled */
- .hw_ip_checksum = 0,
- /**< IP checksum offload enabled */
- .hw_vlan_filter = 1,
- /**< VLAN filtering enabled */
- .hw_vlan_strip = 1,
- .jumbo_frame = 0,
- /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0,
- /**< CRC stripped by hardware */
- },
- .rx_adv_conf = {
- .rss_conf = {
- .rss_key = NULL,
- .rss_hf = ETH_RSS_IP,
- },
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
-};
-
-NSTACK_STATIC struct rte_eth_conf port_conf_default_vhost = {
- .rxmode = {
- .hw_ip_checksum = 0, /* vhost nic doesn't support hw_ip_checksum and hw_vlan_filter */
- .hw_vlan_filter = 0,
- }
-};
-
-/*****************************************************************************
-* Prototype : dpdk_mbuf_to_file
-* Description : write the packet data into a file
-* Input : uint16_t pkt_number
-* struct rte_mbuf **pkts
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC void
-dpdk_mbuf_to_file (uint16_t pkt_number, struct rte_mbuf **pkts)
-{
- char line[100] = { 0 };
- FILE *f = NULL;
- struct rte_mbuf *p = NULL;
- uint16_t len = 0, offset, i;
- uint16_t pktlen = 0;
- uint16_t start = 0;
- uint16_t number = 0;
- unsigned char *data = NULL;
-
- f = fopen ("/var/log/nStack/packet.txt", "a+");
- if (f == NULL)
- {
- NSHAL_LOGERR ("can not open the file:%s", "packet.txt");
- return;
- }
-
- for (i = 0; i < pkt_number; i++)
- {
- pktlen = 0;
- p = pkts[i];
- while (p)
- {
- len = 0;
- data = rte_pktmbuf_mtod (p, unsigned char *);
- while (len < p->data_len)
- {
- start = pktlen % 16; /* start of the line */
- if (start == 0)
- {
- number = SNPRINTF_S (line, sizeof (line), sizeof (line) - 1,
- "%08X", len);
- }
-
- for (offset = 0;
- ((offset + start) < 16) && ((len + offset) < p->data_len);
- offset++)
- {
- number +=
- SNPRINTF_S (line + number, sizeof (line),
- sizeof (line) - 1, " %02X",
- data[len + offset]);
- }
-
- fprintf (f, "%s", line);
- if ((offset + start) == 16)
- fprintf (f, "\n");
-
- len += offset;
- pktlen += offset;
- (void) MEMSET_S (line, sizeof (line), 0, sizeof (line));
- }
-
- p = p->next;
-
- }
- fprintf (f, "\n");
- }
-
- fclose (f);
- return;
-}
-
-/*****************************************************************************
-* Prototype : hal_rte_eth_rx_burst
-* Description : a copy of rte_eth_rx_burst, because this function invokes
- a global(rte_eth_devices), which cannt be access by dlsym
- symbols
-* Input : uint8_t port_id
-* uint16_t queue_id
-* struct rte_mbuf **rx_pkts
-* const uint16_t nb_pkts
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC inline uint16_t
-hal_rte_eth_rx_burst (uint8_t port_id, uint16_t queue_id,
- struct rte_mbuf ** rx_pkts, const uint16_t nb_pkts)
-{
-#ifdef RTE_ETHDEV_RXTX_CALLBACKS
- struct rte_eth_rxtx_callback *cb;
-#endif
- int16_t nb_rx;
- char *pst_capture_packet = NULL;
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
-
- if (NULL == dev->rx_pkt_burst)
- {
- NSHAL_LOGERR ("dev->rx_pkt_burst is NULL,dev=%p", dev);
- return 0;
- }
-
-#ifdef RTE_LIBRTE_ETHDEV_DEBUG
- RTE_ETH_VALID_PORTID_OR_ERR_RET (port_id, 0);
- RTE_FUNC_PTR_OR_ERR_RET (*dev->rx_pkt_burst, 0);
-
- if (queue_id >= dev->data->nb_rx_queues)
- {
- RTE_PMD_DEBUG_TRACE ("Invalid RX queue_id=%d\n", queue_id);
- return 0;
- }
-#endif
- nb_rx = (*dev->rx_pkt_burst) (dev->data->rx_queues[queue_id],
- rx_pkts, nb_pkts);
-
-#ifdef RTE_ETHDEV_RXTX_CALLBACKS
- cb = dev->post_rx_burst_cbs[queue_id];
-
- if (unlikely (cb != NULL))
- {
- do
- {
- nb_rx = cb->fn.rx (port_id, queue_id, rx_pkts, nb_rx,
- nb_pkts, cb->param);
- cb = cb->next;
- }
- while (cb != NULL);
- }
-#endif
-
- //pst_capture_packet = getenv ("NSTACK_CAPTURE_PACKET");
- if (pst_capture_packet && strcmp (pst_capture_packet, "1") == 0)
- {
- dpdk_mbuf_to_file (nb_rx, rx_pkts);
- }
- return (uint16_t) nb_rx;
-}
-
-/*****************************************************************************
-* Prototype : hal_rte_eth_tx_burst
-* Description : a copy of rte_eth_tx_burst, because this function invokes
-
-* Input : uint8_t port_id
-* uint16_t queue_id
-* struct rte_mbuf **tx_pkts
-* uint16_t nb_pkts
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC inline uint16_t
-hal_rte_eth_tx_burst (uint8_t port_id, uint16_t queue_id,
- struct rte_mbuf ** tx_pkts, uint16_t nb_pkts)
-{
-#ifdef RTE_ETHDEV_RXTX_CALLBACKS
- struct rte_eth_rxtx_callback *cb;
-#endif
- int16_t nb_tx = 0;
- char *pst_capture_packet = NULL;
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
-
- if (NULL == dev->tx_pkt_burst)
- {
- NSHAL_LOGERR ("dev->tx_pkt_burst is NULL");
- return 0;
- }
-
-#ifdef RTE_LIBRTE_ETHDEV_DEBUG
- RTE_ETH_VALID_PORTID_OR_ERR_RET (port_id, 0);
- RTE_FUNC_PTR_OR_ERR_RET (*dev->tx_pkt_burst, 0);
-
- if (queue_id >= dev->data->nb_tx_queues)
- {
- RTE_PMD_DEBUG_TRACE ("Invalid TX queue_id=%d\n", queue_id);
- return 0;
- }
-#endif
-
-#ifdef RTE_ETHDEV_RXTX_CALLBACKS
- cb = dev->pre_tx_burst_cbs[queue_id];
-
- if (unlikely (cb != NULL))
- {
- do
- {
- nb_pkts = cb->fn.tx (port_id, queue_id, tx_pkts, nb_pkts,
- cb->param);
- cb = cb->next;
- }
- while (cb != NULL);
- }
-#endif
-
- nb_tx = (*dev->tx_pkt_burst) (dev->data->tx_queues[queue_id], tx_pkts,
- nb_pkts);
-
- //pst_capture_packet = getenv ("NSTACK_CAPTURE_PACKET");
- if (pst_capture_packet && strcmp (pst_capture_packet, "1") == 0)
- {
- dpdk_mbuf_to_file (nb_tx, tx_pkts);
- }
-
- return nb_tx;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_hugepage_size
- Description : get the free hugepage size
- Input : the dir of the nstack hugepage
- Output : free hugepage size
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-int
-dpdk_read_hugepage_size (int *freehuge)
-{
- int fd_huge;
- int len;
- char buf[5] = { '\0' };
- fd_huge =
- open ("/sys/kernel/mm/hugepages/hugepages-1048576kB/free_hugepages",
- O_RDONLY);
- if (fd_huge < 0)
- {
- NSHAL_LOGERR ("errno=%d", errno);
- return -1;
- }
-
- len = read (fd_huge, buf, sizeof (buf));
- if (len < 0)
- {
- NSHAL_LOGERR ("errno=%d", errno);
- close (fd_huge); //fix codeDEX 124547
- return -1;
- }
- *freehuge = buf[0] - '0';
- NSHAL_LOGINF ("hugepage size=%d", *freehuge);
- close (fd_huge);
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_clear_hugedir
- Description : clear the hugepage which is used by dpdk
- Input : the dir of the nstack hugepage
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_clear_hugedir (const char *hugedir)
-{
- DIR *dir;
- struct dirent *dirent_dpdk;
- int dir_fd, fd, lck_result, lk_result;
- const char filter[] = "*mapns*"; /* matches hugepage files */
-
- /* open directory */
- dir = opendir (hugedir);
- if (!dir)
- {
- NSHAL_LOGERR ("the path %s is not exist, errno = %d", hugedir, errno);
- goto error;
- }
- dir_fd = dirfd (dir);
-
- dirent_dpdk = readdir (dir);
- if (!dirent_dpdk)
- {
- NSHAL_LOGERR ("the dir %s can not read, errno = %d", hugedir, errno);
- goto error;
- }
-
- while (dirent_dpdk != NULL)
- {
- /* skip files that don't match the hugepage pattern */
- if (fnmatch (filter, dirent_dpdk->d_name, 0) > 0)
- {
- NSHAL_LOGWAR ("the file name %s is not match mapns, errno = %d",
- dirent_dpdk->d_name, errno);
- dirent_dpdk = readdir (dir);
- continue;
- }
-
- /* try and lock the file */
- fd = openat (dir_fd, dirent_dpdk->d_name, O_RDONLY);
-
- /* skip to next file */
- if (fd == -1)
- {
- NSHAL_LOGERR ("the file name %s can not be lock, errno = %d",
- dirent_dpdk->d_name, errno);
- dirent_dpdk = readdir (dir);
- continue;
- }
-
- /* non-blocking lock */
- lck_result = flock (fd, LOCK_EX | LOCK_NB);
-
- /* if lock succeeds, unlock and remove the file */
- if (lck_result != -1)
- {
- NSHAL_LOGWAR
- ("the file name %s can be lock and will delete, errno = %d",
- dirent_dpdk->d_name, errno);
- lck_result = flock (fd, LOCK_UN);
- if (-1 == lck_result)
- NSHAL_LOGERR ("the file name %s unlock fail, errno = %d",
- dirent_dpdk->d_name, errno);
- lk_result = unlinkat (dir_fd, dirent_dpdk->d_name, 0);
- if (-1 == lk_result)
- NSHAL_LOGERR ("the file name %s is unlinkat fail, errno = %d",
- dirent_dpdk->d_name, errno);
- }
- close (fd);
- dirent_dpdk = readdir (dir);
- }
-
- (void) closedir (dir);
- return 0;
-
-error:
- if (dir)
- (void) closedir (dir);
-
- return -1;
-}
-
-/*****************************************************************************
- Prototype : dpdk_init_global
- Description : DPDK global init
- Input : int argc
- char** argv
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_init_global (int argc, char **argv)
-{
- //int ret;
- const char hugepath[] = "/mnt/nstackhuge";
- //int freeHuge = 0;
- //int retryCount = 10;
-
- if (-1 == dpdk_clear_hugedir (hugepath))
- {
- NSHAL_LOGERR ("clear hugedir fail, try again!");
- sys_sleep_ns (0, 100000000);
- (void) dpdk_clear_hugedir (hugepath);
- }
- NSHAL_LOGINF ("init global succ");
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_init_env
- Description : init dpdk run env
- Input : void
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_init_env (void)
-{
- int ret;
- size_t len_size;
- char *dpdk_env;
- char *dpdk_path;
-
- /* Get dpdk_tool_path */
- dpdk_env = getenv (DPDK_TOOL_ENV);
- if (NULL == dpdk_env)
- {
- NSHAL_LOGERR ("please set enviroment:%s before start this stack"
- "\nthe value of the %s must be the path of dpdk tools",
- DPDK_TOOL_ENV, DPDK_TOOL_ENV);
- return -1;
- }
-
- /* modify ugly len_size judgement and strcpy */
- /* check len_size for malloc */
- len_size = strlen (dpdk_env);
- if (0 == len_size || len_size >= HAL_MAX_PATH_LEN)
- {
- NSHAL_LOGERR ("fail to dpdk_env strlen(DPDK_TOOL_ENV)");
- return -1;
- }
-
- /* DPDK_TOOL_ENV's value will be use as popen's paramter,we need check's validity */
- dpdk_path = realpath (dpdk_env, NULL);
- if (NULL == dpdk_path)
- {
- NSHAL_LOGERR ("env:%s value incorrect]value=%s,errno=%d", DPDK_TOOL_ENV,
- dpdk_env, errno);
- return -1;
- }
-
- len_size = strlen (dpdk_path);
- if (0 == len_size || len_size >= HAL_MAX_PATH_LEN)
- {
- NSHAL_LOGERR ("fail to dpdk_path strlen(DPDK_TOOL_ENV)");
- return -1;
- }
-
- ret = STRCPY_S (dpdk_tool_path, HAL_MAX_PATH_LEN, dpdk_path);
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRCPY_S failed]ret=%d", ret);
- return -1;
- }
-
- if (!hal_is_script_valid (dpdk_tool_path))
- {
- NSHAL_LOGERR ("dpdk_tool_path is invalid]dpdk_tool_path=%s",
- dpdk_tool_path);
- return -1;
- }
-
- /* get non-root user's id */
- dpdk_non_root_user = getpwnam (DPDK_NON_ROOT_USER_NAME);
- if (dpdk_non_root_user)
- {
- NSHAL_LOGINF ("non-root]name=%s,uid=%u,gid=%u,errno=%d",
- dpdk_non_root_user->pw_name, dpdk_non_root_user->pw_uid,
- dpdk_non_root_user->pw_gid, errno);
- }
- else
- {
- NSHAL_LOGERR ("non-root]cannot find user %s", DPDK_NON_ROOT_USER_NAME);
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_init_local
- Description : DPDK local init
- Input : void
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_init_local (void)
-{
- int ret;
-
- ret = dpdk_init_env ();
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("dpdk_init_env failed");
- return -1;
- }
-
- NSHAL_LOGINF ("init local succ");
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_set_port
- Description : check and save the port num
- Input : netif_inst_t* inst
- int port
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_port (netif_inst_t * inst, uint8_t port)
-{
- if (port >= rte_eth_dev_count ())
- {
- NSHAL_LOGERR ("the number of port=%d is more than rte_eth_dev_count=%d",
- port, rte_eth_dev_count ());
- return -1;
- }
-
- inst->data.dpdk_if.port_id = port;
-
- return 0;
-
-}
-
-/*****************************************************************************
- Prototype : dpdk_set_nic_type
- Description : check and save nic type
- Input : netif_inst_t* inst
- const char* type
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_nic_type (netif_inst_t * inst, const char *type)
-{
- int ret;
-
- ret =
- STRCPY_S (inst->data.dpdk_if.nic_type,
- sizeof (inst->data.dpdk_if.nic_type), type);
- if (EOK != ret)
- {
- NSHAL_LOGERR ("strcpy_s set nic_type failed]ret=%d", ret);
- return -1;
- }
-
- /*
- * *nic_type is first checked at read_ipmoduleoperateadd_configuration,
- * *thus here we dont boring validating it once more and just return.
- * */
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_set_nic_name
- Description : check and save nic name
- Input : netif_inst_t* inst
- const char* name
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_nic_name (netif_inst_t * inst, const char *name)
-{
- int ret;
-
- /* sizeof(pointer) always = 8 in 64 bit system */
- ret =
- STRCPY_S (inst->data.dpdk_if.nic_name,
- sizeof (inst->data.dpdk_if.nic_name), name);
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRCPY_S set nic_name failed]ret=%d", ret);
- return -1;
- }
-
- if (!hal_is_script_valid (inst->data.dpdk_if.nic_name))
- {
- NSHAL_LOGERR ("nic_name is invalid");
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_driver_name
- Description : get and save driver name
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_driver_name (netif_inst_t * inst)
-{
- int ret_len, ret;
- char script_cmmd[HAL_SCRIPT_LENGTH];
- char driver_name[HAL_SCRIPT_LENGTH] = { 0 };
-
- ret = hal_snprintf (script_cmmd, sizeof (script_cmmd),
- "readlink -f /sys/class/net/" "%s"
- "/device/driver| awk -F'/' '{print $6}'",
- inst->data.dpdk_if.nic_name);
- if (-1 == ret)
- {
- NSHAL_LOGERR ("hal_snprintf failed");
- return -1;
- }
-
- ret_len =
- hal_run_script (script_cmmd, driver_name, sizeof (driver_name) - 1);
-
- if (ret_len > HAL_MAX_DRIVER_NAME_LEN)
- {
- ret_len = HAL_MAX_DRIVER_NAME_LEN;
- }
-
- if (ret_len <= 0)
- {
- NSHAL_LOGERR ("%s does't have a driver", driver_name);
-
- ret =
- STRNCPY_S (inst->data.dpdk_if.driver_name,
- sizeof (inst->data.dpdk_if.driver_name), "NULL",
- sizeof ("NULL"));
-
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRNCPY_S failed]ret=%d.", ret);
- return -1;
- }
-
- return -1;
- }
- else
- {
- ret =
- STRNCPY_S (inst->data.dpdk_if.driver_name,
- sizeof (inst->data.dpdk_if.driver_name), driver_name,
- ret_len);
-
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRNCPY_S failed]ret=%d.", ret);
- return -1;
- }
-
- inst->data.dpdk_if.driver_name[(ret_len - 1)] = '\0';
-
- return 0;
- }
-}
-
-/*****************************************************************************
- Prototype : dpdk_set_pci_permission
- Description : set pci permission
- Input : char *pci_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_pci_permission (char *pci_addr)
-{
- DIR *dir_desc;
- char file_path[HAL_SCRIPT_LENGTH] = { 0 }, dir_path[HAL_SCRIPT_LENGTH] =
- {
- 0};
- struct dirent *ent;
- struct stat statbuf;
- int ret;
-
- ret =
- SNPRINTF_S (dir_path, sizeof (dir_path), sizeof (dir_path) - 1,
- "/sys/bus/pci/devices/%s", pci_addr);
- if (ret < 0)
- {
- NSHAL_LOGERR ("SNPRINTF_S fail");
- return -1;
- }
-
- if ((dir_desc = opendir (dir_path)) == NULL)
- {
- NSHAL_LOGERR ("opendir fail:errno=%d", errno);
- return -1;
- }
-
- while ((ent = readdir (dir_desc)) != NULL)
- {
- if (strstr (ent->d_name, "resource"))
- {
- ret =
- SNPRINTF_S (file_path, sizeof (file_path), sizeof (file_path) - 1,
- "%s/%s", dir_path, ent->d_name);
- if (ret < 0)
- {
- NSHAL_LOGERR ("SNPRINTF_S fail");
- (void) closedir (dir_desc);
- return -1;
- }
-
- if (!lstat (file_path, &statbuf) && !S_ISDIR (statbuf.st_mode))
- {
- ret =
- chown (file_path, dpdk_non_root_user->pw_uid,
- dpdk_non_root_user->pw_gid);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chown fail]file_path=%s,ret=%d,errno=%d",
- file_path, ret, errno);
- (void) closedir (dir_desc);
- return -1;
- }
- NSHAL_LOGWAR ("chown succ]file_path=%s,ret=%d", file_path, ret);
- ret = chmod (file_path, 0640);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chmod fail]file_path=%s,ret=%d,errno=%d",
- file_path, ret, errno);
- (void) closedir (dir_desc);
- return -1;
- }
- NSHAL_LOGWAR ("chmod succ]file_path=%s,ret=%d", file_path, ret);
- }
- }
- }
-
- (void) closedir (dir_desc);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_pci_addr
- Description : get and save pci addr
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_pci_addr (netif_inst_t * inst)
-{
- int ret, pci_len;
- struct ethtool_drvinfo edata = { 0 };
- struct ifreq ifr;
- int fd = -1;
-
- /* use ioctl to get pci address instead of call dpdk-devbind.py to reduce time cost */
- ret = MEMSET_S (&ifr, sizeof (ifr), 0, sizeof (ifr));
- if (EOK != ret)
- {
- NSHAL_LOGERR ("MEMSET_S fail");
- return -1;
- }
- edata.cmd = ETHTOOL_GDRVINFO;
- ret =
- STRCPY_S (ifr.ifr_name, sizeof (ifr.ifr_name),
- inst->data.dpdk_if.nic_name);
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRCPY_S fail");
- return -1;
- }
-
- ifr.ifr_data = (char *) (&edata);
- if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
- {
- NSHAL_LOGERR ("cannot init socket, errno=%d", errno);
- return -1;
- }
- if (ioctl (fd, SIOCETHTOOL, &ifr) < 0)
- {
- NSHAL_LOGERR ("ioctl to the device %s err, errno=%d",
- inst->data.dpdk_if.nic_name, errno);
- close (fd);
- return -1;
- }
- close (fd);
-
- pci_len = strlen (edata.bus_info);
- if (pci_len == 0
- || pci_len > (int) sizeof (inst->data.dpdk_if.pci_addr) - 1)
- {
- NSHAL_LOGERR ("does't have a pci_addr");
- inst->data.dpdk_if.pci_addr[0] = '\0';
- return -1;
- }
-
- NSHAL_LOGINF ("nic_name=%s,nic_pci_addr=%s", inst->data.dpdk_if.nic_name,
- edata.bus_info);
-
- ret =
- STRNCPY_S (inst->data.dpdk_if.pci_addr,
- sizeof (inst->data.dpdk_if.pci_addr), edata.bus_info, pci_len);
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRNCPY_S failed]ret=%d.", ret);
- return -1;
- }
-
- if (!hal_is_script_valid (inst->data.dpdk_if.pci_addr))
- {
- NSHAL_LOGERR ("pci_addr is invalid]pci_addr=%s",
- inst->data.dpdk_if.pci_addr);
- return -1;
- }
-
- if (dpdk_non_root_user && getuid ())
- {
- ret = dpdk_set_pci_permission (inst->data.dpdk_if.pci_addr);
- if (ret < 0)
- {
- NSHAL_LOGERR ("dpdk_set_pci_permission fail");
- return -1;
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_mlx_linkup
- Description : linkup the port for mlx
- In bonding mode, mlx4 NICs should be set up manually,
- in order to make bond port up
- Input : char* name
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_mlx_linkup (char *name)
-{
- struct ifreq st_ifreq;
- int sock;
- int retVal;
-
- if ((sock = socket (AF_INET, SOCK_STREAM, 0)) < 0)
- {
- NSHAL_LOGERR ("socket fail]errno=%d", errno);
- return 2;
- }
-
- retVal = STRCPY_S (st_ifreq.ifr_name, sizeof (st_ifreq.ifr_name), name);
-
- if (EOK != retVal)
- {
- NSHAL_LOGERR ("STRCPY_S fail]");
- close (sock);
- return 1;
- }
-
- if (ioctl (sock, (uint64_t) SIOCGIFFLAGS, &st_ifreq) < 0)
- {
- NSHAL_LOGERR ("ioctl SIOCGIFFLAGS fail]errno=%d", errno);
- close (sock);
- return 3;
- }
-
- st_ifreq.ifr_flags |= IFF_UP;
- st_ifreq.ifr_flags |= IFF_RUNNING;
-
- if (ioctl (sock, (uint64_t) SIOCSIFFLAGS, &st_ifreq) < 0)
- {
- NSHAL_LOGERR ("ioctl SIOCSIFFLAGS fail]errno=%d", errno);
- close (sock);
- return 3;
- }
-
- close (sock);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_nonmlx_linkdown
- Description : linkdown the port for nonmlx
- Input : char* name
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_nonmlx_linkdown (char *name)
-{
- int ret, ret_len;
- char script_cmmd[HAL_SCRIPT_LENGTH];
- char result_buf[HAL_SCRIPT_LENGTH];
-
- ret =
- hal_snprintf (script_cmmd, sizeof (script_cmmd), "sudo ifconfig %s down",
- name);
- if (-1 == ret)
- {
- NSHAL_LOGERR ("spl_snprintf failed]");
- return -1;
- }
-
- ret_len = hal_run_script (script_cmmd, result_buf, sizeof (result_buf));
- NSHAL_LOGINF ("ifconfig]script_cmmd=%s,ret_len=%d", script_cmmd, ret_len);
- if (0 > ret_len)
- {
- NSHAL_LOGERR ("cannot able to ifconfig %s down", name);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_uio_by_pci_addr
- Description : get uio
- Input : char *pci_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_uio_by_pci_addr (char *pci_addr)
-{
- int i, ret, ret_len;
- char script_cmmd[HAL_SCRIPT_LENGTH];
- char result_buf[HAL_SCRIPT_LENGTH];
-
- for (i = 0; i < RTE_MAX_ETHPORTS; i++)
- {
- ret = hal_snprintf (script_cmmd, sizeof (script_cmmd),
- "readlink ls /sys/class/uio/uio%d/device | awk -F '/' '{print $4}'",
- i);
- if (-1 == ret)
- {
- NSHAL_LOGERR ("hal_snprintf fail]pci=%s,i=%d", pci_addr, i);
- return -1;
- }
-
- ret_len = hal_run_script (script_cmmd, result_buf, sizeof (result_buf));
- if (0 > ret_len)
- {
- NSHAL_LOGERR ("hal_run_script fail]pci=%s,i=%d", pci_addr, i);
- return -1;
- }
- if (strcmp (result_buf, pci_addr) == 0)
- return i;
- }
-
- return -1;
-}
-
-/*****************************************************************************
- Prototype : dpdk_set_uio_permission
- Description : set uio permission
- Input : char *pci_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_uio_permission (char *pci_addr)
-{
- int ret, uio_idx;
- char file_path[HAL_SCRIPT_LENGTH / 2] = { 0 };
-
- /* get /dev/uio by pci addr */
- uio_idx = dpdk_get_uio_by_pci_addr (pci_addr);
- if (uio_idx < 0)
- {
- NSHAL_LOGERR ("dpdk_get_uio_by_pci_addr fail]pci_addr=%s", pci_addr);
- return -1;
- }
-
- NSHAL_LOGINF ("uio_idx]pci=%s,uio%d", pci_addr, uio_idx);
-
- /* change /dev/uio%u permission */
- if (SNPRINTF_S
- (file_path, sizeof (file_path), sizeof (file_path) - 1, "/dev/uio%d",
- uio_idx) < 0)
- {
- NSHAL_LOGERR ("SNPRINTF_S failed]uio%d", uio_idx);
- return -1;
- }
- sys_sleep_ns (0, 500000000);
- ret =
- chown (file_path, dpdk_non_root_user->pw_uid, dpdk_non_root_user->pw_gid);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chown fail]file_path=%s,ret=%d,errno=%d", file_path, ret,
- errno);
- return -1;
- }
- NSHAL_LOGWAR ("chown succ]file_path=%s,ret=%d", file_path, ret);
-
- ret = chmod (file_path, 0640);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chmod fail]file_path=%s,ret=%d,errno=%d", file_path, ret,
- errno);
- return -1;
- }
- NSHAL_LOGWAR ("chmod succ]file_path=%s,ret=%d", file_path, ret);
-
- /* change /sys/class/uio/uio%u/device/config permission */
- if (SNPRINTF_S
- (file_path, sizeof (file_path), sizeof (file_path) - 1,
- "/sys/class/uio/uio%d/device/config", uio_idx) < 0)
- {
- NSHAL_LOGERR ("SNPRINTF_S failed]uio%d", uio_idx);
- return -1;
- }
-
- ret =
- chown (file_path, dpdk_non_root_user->pw_uid, dpdk_non_root_user->pw_gid);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chown fail]file_path=%s,ret=%d,errno=%d", file_path, ret,
- errno);
- return -1;
- }
- NSHAL_LOGWAR ("chown succ]file_path=%s,ret=%d", file_path, ret);
-
- ret = chmod (file_path, 0640);
- if (ret < 0)
- {
- NSHAL_LOGERR ("chmod fail]file_path=%s,ret=%d,errno=%d", file_path, ret,
- errno);
- return -1;
- }
- NSHAL_LOGWAR ("chmod succ]file_path=%s,ret=%d", file_path, ret);
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_nic_list_file
- Description : get dpdk bind nic list file
- Input : void
- Output : char*
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC char *
-dpdk_get_nic_list_file (void)
-{
- int ret;
- static char buffer[HAL_MAX_PATH_LEN]; /* static so auto-zeroed */
- const char *directory = "/var/run";
- const char *home_dir = getenv ("HOME");
-
- if (getuid () != 0 && home_dir != NULL)
- directory = home_dir;
-
- ret =
- SNPRINTF_S (buffer, sizeof (buffer), sizeof (buffer) - 1,
- DPDK_NIC_LIST_FILE, directory);
- if (-1 == ret)
- {
- NSCOMM_LOGERR ("SNPRINTF_S failed]ret=%d", ret);
- return NULL;
- }
-
- return buffer;
-}
-
-/*****************************************************************************
- Prototype : dpdk_bind_uio
- Description : bind uio
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_bind_uio (netif_inst_t * inst)
-{
- char script_cmmd[HAL_SCRIPT_LENGTH];
- char result_buf[HAL_SCRIPT_LENGTH];
- int ret, ret_len;
-
- result_buf[0] = '\0';
-
- if (strncmp ("mlx4_co", inst->data.dpdk_if.driver_name, (size_t) 7) == 0)
- {
- /*For MLX4: NIC should be set link up before rte_eth_dev_start() is called. */
- ret = dpdk_mlx_linkup (inst->data.dpdk_if.nic_name);
- if (0 != ret)
- {
- NSHAL_LOGERR ("set mlx linkup fail]nic_name=%s,ret=%d",
- inst->data.dpdk_if.nic_name, ret);
-
- return -1;
- }
- }
- else
- {
- /*For other drivers: NIC should be set link down before bind uio. */
- ret = dpdk_nonmlx_linkdown (inst->data.dpdk_if.nic_name);
- if (-1 == ret)
- {
- NSHAL_LOGERR ("dpdk_nonmlx_linkdown fail]nic_name=%s",
- inst->data.dpdk_if.nic_name);
- return -1;
- }
-
- /* save binded VF list to file /var/run/ip_module/.nstack_dpdk_nic_list */
- ret = hal_snprintf (script_cmmd, sizeof (script_cmmd),
- "sudo %s"
- "/dpdk-devbind.py -s | grep `ethtool -i %s| grep bus-info |awk '{print $2}'` >> %s 2>&1",
- dpdk_tool_path, inst->data.dpdk_if.nic_name,
- dpdk_get_nic_list_file ());
-
- if (-1 == ret)
- {
- NSHAL_LOGERR ("hal_snprintf fail]nic_name=%s",
- inst->data.dpdk_if.nic_name);
- return -1;
- }
-
- ret_len =
- hal_run_script (script_cmmd, result_buf, sizeof (result_buf) - 1);
- NSHAL_LOGINF ("bind]script_cmmd=%s,ret_len=%d", script_cmmd, ret_len);
- if (0 > ret_len)
- {
- NSHAL_LOGERR ("hal_run_script fail]script_cmmd=%s", script_cmmd);
- return -1;
- }
-
- if (strncmp ("virtio", inst->data.dpdk_if.driver_name, (size_t) 6) == 0)
- {
- /* For Virtio NIC, should call "./devbind.sh ethX" to bind the VF */
- ret = hal_snprintf (script_cmmd, sizeof (script_cmmd),
- "sudo %s"
- "/dpdk-devbind.py --bind=igb_uio `ethtool -i %s| grep bus-info |awk '{print $2}'`",
- dpdk_tool_path, inst->data.dpdk_if.nic_name);
- //"sudo %s" "/devbind.sh " "%s", dpdk_tool_path, inst->data.dpdk_if.nic_name);
-
- }
- else
- {
- ret = hal_snprintf (script_cmmd, sizeof (script_cmmd),
- "sudo %s" "/dpdk-devbind.py --bind=igb_uio "
- "%s", dpdk_tool_path,
- inst->data.dpdk_if.nic_name);
- }
-
- if (-1 == ret)
- {
- NSHAL_LOGERR ("hal_snprintf failed");
- return -1;
- }
-
- ret_len =
- hal_run_script (script_cmmd, result_buf, sizeof (result_buf) - 1);
- NSHAL_LOGINF ("bind]script_cmmd=%s,retlen=%d", script_cmmd, ret_len);
- if (0 > ret_len)
- {
- NSHAL_LOGERR ("hal_run_script fail]script_cmmd=%s", script_cmmd);
- return -1;
- }
-
- if (dpdk_non_root_user && getuid ())
- {
- ret = dpdk_set_uio_permission (inst->data.dpdk_if.pci_addr);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("set_uio_permission fail]nic_name=%s",
- inst->data.dpdk_if.nic_name);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_probe_pci
- Description : probe pci
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_probe_pci (netif_inst_t * inst)
-{
- int ret;
- uint16_t port_id;
- struct rte_eth_dev *eth_dev;
- char *pci_addr = inst->data.dpdk_if.pci_addr;
-
- ret = rte_eal_iopl_init ();
- if (0 != ret)
- {
- NSHAL_LOGERR ("rte_eal_iopl_init fail]pci_addr=%s,ret=%d", pci_addr,
- ret);
- return -1;
- }
-
- ret = rte_eth_dev_attach (pci_addr, &port_id);
- if (0 != ret)
- {
- NSHAL_LOGWAR
- ("pci attach to DPDK fail, the pci may have attached, try to get port id]pci_addr=%s,ret=%d",
- pci_addr, ret);
-
- eth_dev = rte_eth_dev_allocated (inst->data.dpdk_if.nic_name);
- if (NULL != eth_dev && NULL != eth_dev->data)
- {
- port_id = eth_dev->data->port_id;
- ret = 0;
- }
- }
-
- if (!ret)
- {
- ret = dpdk_set_port (inst, port_id);
-
- if (0 == ret)
- {
- NSHAL_LOGINF ("set port success]pci_addr=%s,port_id=%u", pci_addr,
- port_id);
- }
- else
- {
- NSHAL_LOGERR ("set port fail]pci_addr=%s,port_id=%u", pci_addr,
- port_id);
- return -1;
- }
- }
- else
- {
- NSHAL_LOGERR ("get port fail]pci_addr=%s,ret=%d", pci_addr, ret);
- return -1;
- }
-
- /*[TA33635][2017-04-24][l00408818] Start: support bond mode */
- ret = rte_eal_devargs_add (RTE_DEVTYPE_WHITELISTED_PCI, pci_addr);
- if (!ret)
- {
- NSHAL_LOGINF ("pci attach to whitelist success]pci_addr=%s", pci_addr);
- }
- else
- {
- NSHAL_LOGERR ("pci attach to whitelist fail]pci_addr=%s", pci_addr);
- return -1;
- }
- /*[TA33635][2017-04-24][l00408818] End */
-
- return 0;
-}
-
-/*nic_name->driver_name->pci_addr->get port*/
-/*****************************************************************************
- Prototype : dpdk_open
- Description : open the port
- Input : netif_inst_t* inst
- const char* name
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_open (netif_inst_t * inst, const char *name, const char *type)
-{
- int ret;
-
- if ((inst == NULL) || (name == NULL) || (type == NULL))
- {
- NSHAL_LOGERR
- ("invaliad arguments]inst==NULL, nic_type==NULL or type==NULL");
- return -1;
- }
-
- ret = dpdk_set_nic_type (inst, type);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_set_nic_type fail]nic_type=%s, ret=%d", type, ret);
- return -1;
- }
-
- ret = dpdk_set_nic_name (inst, name);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_set_nic_name fail]nic_name=%s, ret=%d", name, ret);
- return -1;
- }
-
- if (!strncmp (type, "vhost", strlen ("vhost")))
- {
- /*for vhost-user device, the remaining steps is unnecessary, y0413485 */
- NSHAL_LOGERR ("initting vhost device]nic_name=%s type=%s", name, type);
- return 0;
- }
-
- ret = dpdk_get_driver_name (inst);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_get_driver_name fail]nic_name=%s, ret=%d", name,
- ret);
- return -1;
- }
-
- ret = dpdk_get_pci_addr (inst);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_get_pci_addr fail]nic_name=%s, ret=%d", name, ret);
- return -1;
- }
-
- ret = dpdk_bind_uio (inst);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_bind_uio fail]nic_name=%s, ret=%d", name, ret);
- return -1;
- }
-
- ret = dpdk_probe_pci (inst);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_probe_pci fail]nic_name=%s, ret=%d", name, ret);
- return -1;
- }
-
- NSHAL_LOGINF ("open port succ]port_id=%u, nic_name=%s",
- inst->data.dpdk_if.port_id, inst->data.dpdk_if.nic_name);
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_close
- Description : close the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_close (netif_inst_t * inst)
-{
- int i;
-
- /* close slave NIC first */
- for (i = 0; i < inst->data.dpdk_if.slave_num; i++)
- {
- rte_eth_dev_close (inst->data.dpdk_if.slave_port[i]);
- NSHAL_LOGINF ("close slave port succ]port_id=%u, nic_name=%s",
- inst->data.dpdk_if.slave_port[i],
- inst->data.dpdk_if.nic_name);
- }
-
- rte_eth_dev_close (inst->data.dpdk_if.port_id);
- NSHAL_LOGINF ("close port succ]port_id=%u, nic_name=%s",
- inst->data.dpdk_if.port_id, inst->data.dpdk_if.nic_name);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_queue_conf
- Description : get the port queue configure
- Input : netif_inst_t* inst
- struct rte_eth_rxconf** rx_conf
- struct rte_eth_txconf** tx_conf
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_queue_conf (netif_inst_t * inst,
- struct rte_eth_rxconf **rx_conf,
- struct rte_eth_txconf **tx_conf)
-{
- static struct rte_eth_dev_info slave_dev_info;
-
- if (strncmp ("igb", inst->data.dpdk_if.driver_name, (size_t) 3) == 0)
- {
- *rx_conf = (struct rte_eth_rxconf *) &rx_conf_default_igb;
- *tx_conf = (struct rte_eth_txconf *) &tx_conf_default_igb;
- NSHAL_LOGINF ("igb config is enable]port_id=%u",
- inst->data.dpdk_if.port_id);
- }
- else if (strncmp ("ixgbe", inst->data.dpdk_if.driver_name, (size_t) 5) == 0)
- {
- *rx_conf = (struct rte_eth_rxconf *) &rx_conf_default_ixgbe;
- *tx_conf = (struct rte_eth_txconf *) &tx_conf_default_ixgbe;
- NSHAL_LOGINF ("igxbe config is enable]port_id=%u",
- inst->data.dpdk_if.port_id);
- }
- else if (strncmp ("bond", inst->data.dpdk_if.driver_name, (size_t) 4) == 0)
- {
- *rx_conf = NULL;
- rte_eth_dev_info_get (inst->data.dpdk_if.slave_port[0],
- &slave_dev_info);
- *tx_conf = &(slave_dev_info.default_txconf);
- NSHAL_LOGINF ("bond config is enable]port_id=%u",
- inst->data.dpdk_if.port_id);
- }
- else
- {
- *rx_conf = NULL;
- *tx_conf = NULL;
- NSHAL_LOGINF ("default config is enable]port_id=%u",
- inst->data.dpdk_if.port_id);
- }
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_port_conf
- Description : get the port configure
- Input : netif_inst_t* inst
- struct rte_eth_conf** port_conf
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC void
-dpdk_get_port_conf (netif_inst_t * inst, struct rte_eth_conf **port_conf)
-{
- if (strncmp ("virtio", inst->data.dpdk_if.driver_name, (size_t) 6) == 0)
- {
- *port_conf = &port_conf_default_virtio;
- }
- else if (strncmp ("bond", inst->data.dpdk_if.driver_name, (size_t) 4) == 0)
- {
- *port_conf = &port_conf_default_bond;
- }
- else if (strncmp ("vhost", inst->data.dpdk_if.nic_type, (size_t) 5) == 0)
- {
- *port_conf = &port_conf_default_vhost;
- return;
- }
- else
- {
- *port_conf = &port_conf_default_normal;
- }
-
- (*port_conf)->rxmode.hw_vlan_filter = inst->data.dpdk_if.hw_vlan_filter;
- (*port_conf)->rxmode.hw_vlan_strip = inst->data.dpdk_if.hw_vlan_strip;
-}
-
-/*****************************************************************************
- Prototype : dpdk_setup_port
- Description : setup the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_setup_port (netif_inst_t * inst)
-{
- int ret;
- uint32_t i;
- struct rte_eth_conf *port_conf;
- struct rte_eth_rxconf *rx_conf;
- struct rte_eth_txconf *tx_conf;
-
- uint8_t port_id = inst->data.dpdk_if.port_id;
- struct rte_mempool **mp =
- (struct rte_mempool **) inst->data.dpdk_if.rx_pool;
- uint32_t *rx_ring_size = inst->data.dpdk_if.rx_ring_size;
- uint32_t *tx_ring_size = inst->data.dpdk_if.tx_ring_size;
- uint32_t rx_queue_num = inst->data.dpdk_if.rx_queue_num;
- uint32_t tx_queue_num = inst->data.dpdk_if.tx_queue_num;
-
- dpdk_get_port_conf (inst, &port_conf);
-
- ret =
- rte_eth_dev_configure (port_id, rx_queue_num, tx_queue_num, port_conf);
- if (ret < 0)
- {
- NSHAL_LOGERR ("rte_eth_dev_configure]port_id=%u,ret=%d", port_id, ret);
- return ret;
- }
-
- if (dpdk_get_queue_conf (inst, &rx_conf, &tx_conf) < 0)
- {
- NSHAL_LOGERR ("dpdk_get_queue_conf failed]inst=%p,rx_conf=%p", inst,
- rx_conf);
- return -1;
- }
- /* fix "FORTIFY.Out-of-Bounds_Read" type codedex issue CID 33436 */
- if (rx_queue_num > HAL_ETH_MAX_QUEUE_NUM
- || tx_queue_num > HAL_ETH_MAX_QUEUE_NUM)
- {
- NSHAL_LOGERR
- ("queue num error]rx_queue_num=%u, tx_queue_num=%u, HAL_ETH_MAX_QUEUE_NUM=%d",
- rx_queue_num, tx_queue_num, HAL_ETH_MAX_QUEUE_NUM);
-
- return -1;
- }
-
- for (i = 0; i < rx_queue_num; i++)
- {
- ret =
- rte_eth_rx_queue_setup (port_id, i, rx_ring_size[i], SOCKET_ID_ANY,
- rx_conf, mp[i]);
- if (ret < 0)
- {
- NSHAL_LOGERR ("rx queue setup fail]index=%u,port_id=%u,ret=%d", i,
- port_id, ret);
- return ret;
- }
- }
-
- for (i = 0; i < tx_queue_num; i++)
- {
- ret =
- rte_eth_tx_queue_setup (port_id, i, tx_ring_size[i], SOCKET_ID_ANY,
- tx_conf);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("tx queue setup fail]q=%u,ret=%d", i, ret);
- return ret;
- }
- }
-
- rte_eth_promiscuous_enable (port_id);
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_start
- Description : start the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_start (netif_inst_t * inst)
-{
- int ret;
- struct ether_addr eth_addr;
-
- ret = dpdk_setup_port (inst);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("call dpdk_setup_port fail]ret=%d", ret);
- return ret;
- }
-
- ret = rte_eth_dev_start (inst->data.dpdk_if.port_id);
- if (ret < 0)
- {
- NSHAL_LOGERR ("rte_eth_dev_start fail]ret=%d", ret);
- return ret;
- }
-
- rte_eth_macaddr_get (inst->data.dpdk_if.port_id, &eth_addr);
- NSHAL_LOGINF ("port_id=%u,nic_name=%s,mac=%02X:%02X:%02X:%02X:%02X:%02X",
- inst->data.dpdk_if.port_id,
- inst->data.dpdk_if.nic_name,
- eth_addr.addr_bytes[0],
- eth_addr.addr_bytes[1],
- eth_addr.addr_bytes[2],
- eth_addr.addr_bytes[3],
- eth_addr.addr_bytes[4], eth_addr.addr_bytes[5]);
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_stop
- Description : stop the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_stop (netif_inst_t * inst)
-{
- int i;
-
- /* stop slave NIC first */
- for (i = 0; i < inst->data.dpdk_if.slave_num; i++)
- {
- rte_eth_dev_stop (inst->data.dpdk_if.slave_port[i]);
- NSHAL_LOGINF ("stop slave port succ]port_id=%u, nic_name=%s",
- inst->data.dpdk_if.slave_port[i],
- inst->data.dpdk_if.nic_name);
- }
- rte_eth_dev_stop (inst->data.dpdk_if.port_id);
-
- NSHAL_LOGINF ("stop port succ]port_id=%u, nic_name=%s",
- inst->data.dpdk_if.port_id, inst->data.dpdk_if.nic_name);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_mtu
- Description : get the port mtu
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC uint32_t
-dpdk_get_mtu (netif_inst_t * inst)
-{
- uint32_t mtu;
-
- if (rte_eth_dev_get_mtu (inst->data.dpdk_if.port_id, (uint16_t *) & mtu))
- {
- return 0;
- }
-
- return mtu;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_macaddr
- Description : get the port mac addr
- Input : netif_inst_t* inst
- void* mac_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_macaddr (netif_inst_t * inst, void *mac_addr)
-{
- /*bond port */
- int primary_port = rte_eth_bond_primary_get (inst->data.dpdk_if.port_id);
- if (0 <= primary_port)
- {
- rte_eth_macaddr_get ((uint8_t) primary_port,
- (struct ether_addr *) mac_addr);
-
- NSHAL_LOGDBG
- ("primary_port_id=%u,nic_name=%s,mac=%02X:%02X:%02X:%02X:%02X:%02X",
- primary_port, inst->data.dpdk_if.nic_name,
- ((struct ether_addr *) mac_addr)->addr_bytes[0],
- ((struct ether_addr *) mac_addr)->addr_bytes[1],
- ((struct ether_addr *) mac_addr)->addr_bytes[2],
- ((struct ether_addr *) mac_addr)->addr_bytes[3],
- ((struct ether_addr *) mac_addr)->addr_bytes[4],
- ((struct ether_addr *) mac_addr)->addr_bytes[5]);
- }
- /*normal port */
- else
- {
- rte_eth_macaddr_get (inst->data.dpdk_if.port_id,
- (struct ether_addr *) mac_addr);
-
- NSHAL_LOGDBG
- ("normal_port_id=%u,nic_name=%s,mac=%02X:%02X:%02X:%02X:%02X:%02X",
- inst->data.dpdk_if.port_id, inst->data.dpdk_if.nic_name,
- ((struct ether_addr *) mac_addr)->addr_bytes[0],
- ((struct ether_addr *) mac_addr)->addr_bytes[1],
- ((struct ether_addr *) mac_addr)->addr_bytes[2],
- ((struct ether_addr *) mac_addr)->addr_bytes[3],
- ((struct ether_addr *) mac_addr)->addr_bytes[4],
- ((struct ether_addr *) mac_addr)->addr_bytes[5]);
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_capa_convert
- Description : convert format from dpdk to hal
- Input : const struct rte_eth_dev_info* dev_info
- hal_netif_capa_t* capa
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC inline void
-dpdk_capa_convert (const struct rte_eth_dev_info *dev_info,
- hal_netif_capa_t * capa)
-{
- int retVal =
- MEMSET_S (capa, sizeof (hal_netif_capa_t), 0, sizeof (hal_netif_capa_t));
- if (EOK != retVal)
- {
- NSHAL_LOGERR ("MEMSET_S fail]retVal=%d", retVal);
- }
-
- capa->tx_offload_capa = dev_info->tx_offload_capa;
-}
-
-/*****************************************************************************
- Prototype : dpdk_get_capability
- Description : get the port capability
- Input : netif_inst_t* inst
- hal_netif_capa_t* capa
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_get_capability (netif_inst_t * inst, hal_netif_capa_t * capa)
-{
- struct rte_eth_dev_info dev_info;
-
- rte_eth_dev_info_get (inst->data.dpdk_if.port_id, &dev_info);
- dpdk_capa_convert (&dev_info, capa);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_recv
- Description : recv packet from the port
- Input : netif_inst_t* inst
- uint16_t queue_id
- struct common_mem_mbuf** rx_pkts
- uint16_t nb_pkts
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC uint16_t
-dpdk_recv (netif_inst_t * inst, uint16_t queue_id,
- hal_mbuf_t ** rx_pkts, uint16_t nb_pkts)
-{
- return hal_rte_eth_rx_burst (inst->data.dpdk_if.port_id, queue_id,
- (struct rte_mbuf **) rx_pkts, nb_pkts);
-}
-
-/*****************************************************************************
- Prototype : dpdk_send
- Description : send packet to the port
- Input : netif_inst_t* inst
- uint16_t queue_id
- struct common_mem_mbuf** tx_pkts
- uint16_t nb_pkts
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC uint16_t
-dpdk_send (netif_inst_t * inst, uint16_t queue_id,
- hal_mbuf_t ** tx_pkts, uint16_t nb_pkts)
-{
- return hal_rte_eth_tx_burst (inst->data.dpdk_if.port_id, queue_id,
- (struct rte_mbuf **) tx_pkts, nb_pkts);
-}
-
-/*****************************************************************************
- Prototype : dpdk_link_status
- Description : get link status form the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC uint32_t
-dpdk_link_status (netif_inst_t * inst)
-{
- struct rte_eth_link eth_link;
-
- /* add log output when failed */
- int retVal = MEMSET_S (&eth_link, sizeof (struct rte_eth_link), 0,
- sizeof (struct rte_eth_link));
- if (EOK != retVal)
- {
- NSHAL_LOGERR ("MEMSET_S fail]retVal=%d", retVal);
- }
-
- rte_eth_link_get (inst->data.dpdk_if.port_id, &eth_link);
-
- return eth_link.link_status;
-}
-
-/*****************************************************************************
- Prototype : dpdk_stats_convert
- Description : convert format from dpdk to hal
- Input : const struct rte_eth_stats* rte_stats
- hal_netif_stats_t* stats
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC inline void
-dpdk_stats_convert (const struct rte_eth_stats *rte_stats,
- hal_netif_stats_t * stats)
-{
- int i;
-
- /* give fail error number when failed */
- int retVal = MEMSET_S (stats, sizeof (hal_netif_stats_t), 0,
- sizeof (hal_netif_stats_t));
- if (EOK != retVal)
- {
- NSHAL_LOGERR ("MEMSET_S fail]retVal=%d", retVal);
- }
-
- stats->ipackets = rte_stats->ipackets;
- stats->opackets = rte_stats->opackets;
- stats->ibytes = rte_stats->ibytes;
- stats->obytes = rte_stats->obytes;
- stats->imissed = rte_stats->imissed;
- stats->ierrors = rte_stats->ierrors;
- stats->oerrors = rte_stats->oerrors;
- stats->rx_nombuf = rte_stats->rx_nombuf;
-
- for (i = 0; i < HAL_ETH_QUEUE_STAT_CNTRS; i++)
- {
- stats->q_ipackets[i] = rte_stats->q_ipackets[i];
- stats->q_opackets[i] = rte_stats->q_opackets[i];
- stats->q_ibytes[i] = rte_stats->q_ibytes[i];
- stats->q_obytes[i] = rte_stats->q_obytes[i];
- stats->q_errors[i] = rte_stats->q_errors[i];
- }
-}
-
-/*****************************************************************************
- Prototype : dpdk_stats
- Description : get stats form the port
- Input : netif_inst_t* inst
- hal_netif_stats_t* stats
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_stats (netif_inst_t * inst, hal_netif_stats_t * stats)
-{
- int ret;
- struct rte_eth_stats rte_stats;
-
- ret = rte_eth_stats_get (inst->data.dpdk_if.port_id, &rte_stats);
- if (ret == 0)
- {
- dpdk_stats_convert (&rte_stats, stats);
- return 0;
- }
-
- return -1;
-}
-
-/*****************************************************************************
- Prototype : dpdk_stats_reset
- Description : reset stats to the port
- Input : netif_inst_t* inst
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_stats_reset (netif_inst_t * inst)
-{
- rte_eth_stats_reset (inst->data.dpdk_if.port_id);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_config
- Description : config the port queue and ring
- Input : netif_inst_t* inst
- hal_netif_config_t* conf
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_config (netif_inst_t * inst, hal_netif_config_t * conf)
-{
- uint32_t i;
-
- inst->data.dpdk_if.hw_vlan_filter = conf->bit.hw_vlan_filter;
- inst->data.dpdk_if.hw_vlan_strip = conf->bit.hw_vlan_strip;
-
- inst->data.dpdk_if.rx_queue_num = conf->rx.queue_num;
- /* fix Buffer Overflow type code-dex issue */
- if (inst->data.dpdk_if.rx_queue_num > HAL_ETH_MAX_QUEUE_NUM)
- {
- NSHAL_LOGERR
- ("rx queue num error]rx_queue_num=%u, HAL_ETH_MAX_QUEUE_NUM=%d",
- inst->data.dpdk_if.rx_queue_num, HAL_ETH_MAX_QUEUE_NUM);
-
- return -1;
- }
-
- for (i = 0; i < inst->data.dpdk_if.rx_queue_num; i++)
- {
- inst->data.dpdk_if.rx_ring_size[i] = conf->rx.ring_size[i];
- inst->data.dpdk_if.rx_pool[i] =
- (struct rte_mempool *) conf->rx.ring_pool[i];
- }
-
- inst->data.dpdk_if.tx_queue_num = conf->tx.queue_num;
- /* fix "FORTIFY.Out-of-Bounds_Read--Off-by-One" type codedex issue */
- if (inst->data.dpdk_if.tx_queue_num > HAL_ETH_MAX_QUEUE_NUM)
- {
- NSHAL_LOGERR
- ("tx queue num error]rx_queue_num=%u, HAL_ETH_MAX_QUEUE_NUM=%d",
- inst->data.dpdk_if.tx_queue_num, HAL_ETH_MAX_QUEUE_NUM);
-
- return -1;
- }
- for (i = 0; i < inst->data.dpdk_if.tx_queue_num; i++)
- {
- inst->data.dpdk_if.tx_ring_size[i] = conf->tx.ring_size[i];
- }
-
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_bond_config
- Description : config the port for bond mode
- Input : netif_inst_t* inst
- uint8_t slave_num
- netif_inst_t* slave_inst[]
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_bond_config (netif_inst_t * inst, uint8_t slave_num,
- netif_inst_t * slave_inst[])
-{
- int ret;
- uint32_t i, queue;
-
- inst->data.dpdk_if.slave_num = slave_num;
-
- for (i = 0; i < slave_num; i++)
- {
- inst->data.dpdk_if.slave_port[i] = slave_inst[i]->data.dpdk_if.port_id;
-
- if (0 == i)
- {
- inst->data.dpdk_if.hw_vlan_filter =
- slave_inst[i]->data.dpdk_if.hw_vlan_filter;
- inst->data.dpdk_if.hw_vlan_strip =
- slave_inst[i]->data.dpdk_if.hw_vlan_strip;
- inst->data.dpdk_if.rx_queue_num =
- slave_inst[i]->data.dpdk_if.rx_queue_num;
- inst->data.dpdk_if.tx_queue_num =
- slave_inst[i]->data.dpdk_if.tx_queue_num;
-
- /*will be used in function dpdk_get_queue_conf and dpdk_get_port_conf */
- ret =
- STRCPY_S (inst->data.dpdk_if.driver_name,
- sizeof (inst->data.dpdk_if.driver_name), "bond");
-
- if (EOK != ret)
- {
- NSHAL_LOGERR ("STRCPY_S failed]ret=%d.", ret);
- return -1;
- }
-
- for (queue = 0; queue < HAL_ETH_MAX_QUEUE_NUM; queue++)
- {
- inst->data.dpdk_if.rx_pool[queue] =
- slave_inst[i]->data.dpdk_if.rx_pool[queue];
- inst->data.dpdk_if.rx_ring_size[queue] =
- slave_inst[i]->data.dpdk_if.rx_ring_size[queue];
- inst->data.dpdk_if.tx_ring_size[queue] =
- slave_inst[i]->data.dpdk_if.tx_ring_size[queue];
- }
- }
- }
-
- return 0;
-
-}
-
-/*****************************************************************************
- Prototype : dpdk_bond
- Description : bond port
- Input : netif_inst_t* inst
- const char* bond_name
- uint8_t slave_num
- netif_inst_t* slave_inst[]
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_bond (netif_inst_t * inst, const char *bond_name, uint8_t slave_num,
- netif_inst_t * slave_inst[])
-{
- int i, ret;
- int port;
- struct ether_addr eth_addr;
-
- /* check if all the slaves' drivers are same, not support different drivers */
- for (i = 1; i < slave_num; i++)
- {
- if (strncmp
- (slave_inst[0]->data.dpdk_if.driver_name,
- slave_inst[i]->data.dpdk_if.driver_name,
- strlen (slave_inst[0]->data.dpdk_if.driver_name)))
- {
- NSHAL_LOGERR
- ("dpdk does not support different types of network card]slave[0]=%s, slave[%i]=%s",
- slave_inst[0]->data.dpdk_if.driver_name, i,
- slave_inst[i]->data.dpdk_if.driver_name);
- return -1;
- }
- }
-
- ret = dpdk_set_nic_name (inst, bond_name);
-
- if (0 != ret)
- {
- NSHAL_LOGERR ("dpdk_set_nic_name fail]ret=%d", ret);
- return -1;
- }
-
- port =
- rte_eth_bond_create (bond_name, BONDING_MODE_ACTIVE_BACKUP, SOCKET_ID_0);
- if (port < 0)
- {
- NSHAL_LOGERR ("rte_eth_bond_create fail]ret=%i", ret);
- return -1;
- }
-
- ret = dpdk_set_port (inst, (uint8_t) port);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("dpdk_set_port fail]ret=%i", ret);
- return ret;
- }
-
- ret = dpdk_bond_config (inst, slave_num, slave_inst);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("dpdk_bond_config fail]ret=%i", ret);
- return ret;
- }
-
- ret = dpdk_setup_port (inst);
-
- if (ret < 0)
- {
- NSHAL_LOGERR ("dpdk_setup_port fail]ret=%i", ret);
- return ret;
- }
-
- for (i = 0; i < slave_num; i++)
- {
- NSHAL_LOGINF ("add slave port_id=%u, nic_name=%s",
- slave_inst[i]->data.dpdk_if.port_id,
- slave_inst[i]->data.dpdk_if.nic_name);
-
- if (rte_eth_bond_slave_add
- ((uint8_t) port, slave_inst[i]->data.dpdk_if.port_id) == -1)
- {
- NSHAL_LOGERR ("adding slave (%u) to bond (%u) failed]",
- slave_inst[i]->data.dpdk_if.port_id, port);
- return -1;
- }
- }
-
- rte_eth_macaddr_get (slave_inst[0]->data.dpdk_if.port_id, &eth_addr);
-
- ret = rte_eth_bond_mac_address_set ((uint8_t) port, &eth_addr);
- if (ret < 0)
- {
- NSHAL_LOGERR ("rte_eth_bond_mac_address_set fail]ret=%i", ret);
- return ret;
- }
-
- ret = rte_eth_dev_start (inst->data.dpdk_if.port_id);
- if (ret < 0)
- {
- NSHAL_LOGERR ("rte_eth_dev_start fail]ret=%i, port_id=%d", ret,
- inst->data.dpdk_if.port_id);
- return ret;
- }
-
- NSHAL_LOGINF ("port_id=%d,nic_name=%s,mac=%02X:%02X:%02X:%02X:%02X:%02X",
- port,
- inst->data.dpdk_if.nic_name,
- eth_addr.addr_bytes[0],
- eth_addr.addr_bytes[1],
- eth_addr.addr_bytes[2],
- eth_addr.addr_bytes[3],
- eth_addr.addr_bytes[4], eth_addr.addr_bytes[5]);
- return 0;
-}
-
-/*****************************************************************************
- Prototype : dpdk_add_mcastaddr
- Description : add mcastaddr to the port
- Input : netif_inst_t* inst
- void* mc_addr_set
- void* mc_addr
- uint32_t nb_mc_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_set_mcastaddr (netif_inst_t * inst, void *mc_addr_set,
- void *mc_addr, uint32_t nb_mc_addr)
-{
- uint8_t port = inst->data.dpdk_if.port_id;
- int iRetVal;
-
- NSHAL_LOGINF ("mc_addr_set number=%u", nb_mc_addr);
- iRetVal = rte_eth_dev_set_mc_addr_list (port, mc_addr_set, nb_mc_addr);
- if (iRetVal != 0)
- {
- NSHAL_LOGWAR ("fail to set_mc_addr_list]port=%u,ret=%d", port, iRetVal);
- }
-
- return iRetVal;
-}
-
-/*****************************************************************************
- Prototype : dpdk_add_mac_addr
- Description : add mcastaddr to the port
- Input : netif_inst_t* inst
- void* mc_addr
- Output : None
- Return Value : NSTACK_STATIC int
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_add_mac_addr (netif_inst_t * inst, void *mc_addr)
-{
- uint8_t port = inst->data.dpdk_if.port_id;
- int iRetVal;
-
- /* for MLX: set_mc_addr_list() is not callback, so call mac_addr_add() instead */
- iRetVal = rte_eth_dev_mac_addr_add (port, mc_addr, 0);
- if (0 != iRetVal)
- {
- NSHAL_LOGWAR ("fail to add_mac_addr]port=%u,ret=%d", port, iRetVal);
- }
-
- return iRetVal;
-}
-
-/*****************************************************************************
- Prototype : dpdk_rmv_mac_addr
- Description : remove mcastaddr to the port
- Input : netif_inst_t* inst
- void* mc_addr
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_rmv_mac_addr (netif_inst_t * inst, void *mc_addr)
-{
- uint8_t port = inst->data.dpdk_if.port_id;
- int iRetVal;
-
- /* for MLX: set_mc_addr_list() is not callback, so call mac_addr_remove() instead */
- iRetVal = rte_eth_dev_mac_addr_remove (port, mc_addr);
- if (0 != iRetVal)
- {
- NSHAL_LOGWAR ("fail to rmv_mac_addr]port=%u,ret=%d", port, iRetVal);
- }
-
- return iRetVal;
-}
-
-/*****************************************************************************
- Prototype : dpdk_allmcast
- Description : set allmcast mode to the port
- Input : netif_inst_t* inst
- uint8_t enable
- Output : None
- Return Value : NSTACK_STATIC
- Calls :
- Called By :
-
-*****************************************************************************/
-NSTACK_STATIC int
-dpdk_allmcast (netif_inst_t * inst, uint8_t enable)
-{
- if (enable)
- {
- rte_eth_allmulticast_enable (inst->data.dpdk_if.port_id);
- }
- else
- {
- rte_eth_allmulticast_disable (inst->data.dpdk_if.port_id);
- }
-
- return 0;
-}
-
-const netif_ops_t dpdk_netif_ops = {
- .name = "dpdk",
- .init_global = dpdk_init_global,
- .init_local = dpdk_init_local,
- .open = dpdk_open,
- .close = dpdk_close,
- .start = dpdk_start,
- .stop = dpdk_stop,
- .bond = dpdk_bond,
- .mtu = dpdk_get_mtu,
- .macaddr = dpdk_get_macaddr,
- .capability = dpdk_get_capability,
- .recv = dpdk_recv,
- .send = dpdk_send,
- .link_status = dpdk_link_status,
- .stats = dpdk_stats,
- .stats_reset = dpdk_stats_reset,
- .config = dpdk_config,
- .mcastaddr = dpdk_set_mcastaddr,
- .add_mac = dpdk_add_mac_addr,
- .rmv_mac = dpdk_rmv_mac_addr,
- .allmcast = dpdk_allmcast
-};
-
-HAL_IO_REGISTER (dpdk, &dpdk_netif_ops);
diff --git a/stacks/lwip_stack/src/maintain/CMakeLists.txt b/stacks/lwip_stack/src/maintain/CMakeLists.txt
deleted file mode 100644
index 05c5117..0000000
--- a/stacks/lwip_stack/src/maintain/CMakeLists.txt
+++ /dev/null
@@ -1,44 +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.
-#########################################################################
-
-if(WITH_HAL_LIB)
-else()
- SET(PAL_H_DIRECTORIES "/usr/include/dpdk/")
- SET(PAL_BITWIDE_ADJUST ${PROJECT_SOURCE_DIR}/../../src/framework/common/base/include/common_pal_bitwide_adjust.h)
- ADD_DEFINITIONS(-include ${PAL_BITWIDE_ADJUST})
- INCLUDE_DIRECTORIES(
- ${PAL_H_DIRECTORIES}
- )
-endif()
-
-FILE(GLOB_RECURSE NSTACKMAINTAIN *.c)
-
-LINK_LIBRARIES(m dl rt dmm_api)
-if(WITH_SECUREC_LIB)
-INCLUDE_DIRECTORIES(
- ./
- ${JSON_C_SRC}
- ${SECUREC_SRC}
- ${CMAKE_CURRENT_LIST_DIR}/../include/
-)
-else()
-INCLUDE_DIRECTORIES(
- ./
- ${JSON_C_SRC}
- ${CMAKE_CURRENT_LIST_DIR}/../include/
-)
-endif()
-ADD_LIBRARY(nStackMaintain STATIC ${NSTACKMAINTAIN})
diff --git a/stacks/lwip_stack/src/maintain/fw_mt_config.c b/stacks/lwip_stack/src/maintain/fw_mt_config.c
deleted file mode 100644
index 403a46e..0000000
--- a/stacks/lwip_stack/src/maintain/fw_mt_config.c
+++ /dev/null
@@ -1,807 +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 header files *
- *----------------------------------------------*/
-
-#include "types.h"
-#include "nsfw_mt_config.h"
-#include <stdlib.h>
-#include <pthread.h>
-#include "nstack_log.h"
-#include "nstack_securec.h"
-#include "json.h"
-#include "nsfw_init.h"
-#include "nsfw_mgr_com_api.h"
-
-/*==============================================*
- * project-wide global variables *
- *----------------------------------------------*/
-
-// can be read from config file
-u32 g_base_cfg_items[MAX_BASE_CFG] = { 0 };
-
-// calculated according to base config
-u32 g_custom_cfg_items[MAX_CUSTOM_CFG] = { 0 };
-
-// note: if seg number greater than 16, such buffer should use malloc
-// or it will be exceed 2K
-struct cfg_item_info g_cfg_item_info[CFG_SEG_MAX][MAX_CFG_ITEM];
-
-NSTACK_STATIC int g_cfg_item_count[CFG_SEG_MAX] = { 0 };
-
-NSTACK_STATIC char *g_cfg_seg_name[CFG_SEG_MAX];
-
-/*==============================================*
- * routines' or functions' implementations *
- *----------------------------------------------*/
-
-/* nStackCtrl cannot get the env path info, no start by shell script, need get
- the path info ,and legal check , add a input parameter proc_type*/
-
-NSTACK_STATIC int
-get_ctrl_dir_info (char *current_path, unsigned path_len)
-{
- char ctrl_dir[MAX_FILE_NAME_LEN] = { 0 };
- int count = 0;
- unsigned int dir_len = 0;
-
- //nStackCtrl cannot get the path from the env, so need get from current pwd.
- count = readlink ("/proc/self/exe", ctrl_dir, MAX_FILE_NAME_LEN);
- if ((count < 0) || (count >= MAX_FILE_NAME_LEN))
- {
- save_pre_init_log (NSLOG_ERR,
- "readlink get nStackCtrl path failed, write nothing!");
- return -1;
- }
- ctrl_dir[count] = '\0';
-
- dir_len = strlen (ctrl_dir);
- if ((dir_len > strlen ("nStackCtrl")) && (dir_len < MAX_FILE_NAME_LEN))
- {
- ctrl_dir[dir_len - strlen ("nStackCtrl")] = '\0';
- }
- else
- {
- save_pre_init_log (NSLOG_ERR, "path strlen is illegal, write nothing!");
- return -1;
- }
-
- if (NULL == strstr (ctrl_dir, "bin"))
- {
- /* Exit before nstack_log_init, use printf */
- printf
- ("the nStackServer content change, plz keep same with nStack release, exit!\n");
-#ifdef FOR_NSTACK_UT
- return -1;
-#else
- exit (1);
-#endif
- }
- if (EOK !=
- STRNCAT_S (ctrl_dir, sizeof (ctrl_dir), "/../configure",
- strlen ("/../configure")))
- {
- save_pre_init_log (NSLOG_ERR, "STRNCAT_S failed, current_dir = %s",
- ctrl_dir);
- return -1;
- }
-
- if (-1 == SNPRINTF_S (current_path, path_len, path_len - 1, "%s", ctrl_dir))
- {
- save_pre_init_log (NSLOG_ERR,
- "SNPRINTF_S path name failed, ctrl_dir %s.",
- ctrl_dir);
- return -1;
- }
-
- return 0;
-
-}
-
-NSTACK_STATIC int
-get_cfg_buf (u32 proc_type, char *cfg_buf, unsigned buf_size)
-{
- char current_dir[MAX_FILE_NAME_LEN] = { 0 };
- char cfg_file_name[MAX_FILE_NAME_LEN] = { 0 };
- char *cfg_resolved_path = NULL;
- char *cfg_path = NULL;
- FILE *fp = NULL;
- int cfg_buf_len = 0;
-
- cfg_path = getenv (CFG_PATH);
- if ((NULL == cfg_path) && (NSFW_PROC_CTRL == proc_type))
- {
- if (-1 == get_ctrl_dir_info (current_dir, sizeof (current_dir)))
- {
- save_pre_init_log (NSLOG_ERR, "get_ctrl_dir_info failed.");
- return -1;
- }
- cfg_path = current_dir;
- }
- else if ((NULL == cfg_path) && (NSFW_PROC_CTRL != proc_type))
- {
- save_pre_init_log (NSLOG_ERR,
- "main or master process get nstack config path failed, will use default config!");
- return -1;
- }
-
- if (-1 ==
- SPRINTF_S (cfg_file_name, sizeof (cfg_file_name), "%s/%s", cfg_path,
- CFG_FILE_NAME))
- {
- save_pre_init_log (NSLOG_ERR,
- "format config file name failed, path %s, name %s.",
- cfg_path, CFG_FILE_NAME);
- return -1;
- }
-
- cfg_resolved_path = realpath (cfg_file_name, NULL);
- if (NULL == cfg_resolved_path)
- {
- save_pre_init_log (NSLOG_ERR, "config file path invalid, cfg name %s.",
- cfg_file_name);
- return -1;
- }
-
- fp = fopen (cfg_resolved_path, "r");
- if (NULL == fp)
- {
- free (cfg_resolved_path);
- save_pre_init_log (NSLOG_ERR, "config file path invalid, cfg name %s.",
- cfg_file_name);
- return -1;
- }
-
- free (cfg_resolved_path);
- // read config file to json buffer
- cfg_buf_len = fread (cfg_buf, 1, buf_size, fp);
-
- fclose (fp);
-
- return cfg_buf_len;
-}
-
-NSTACK_STATIC inline int
-get_value_from_json_obj (struct json_object *obj, struct cfg_item_info *pitem)
-{
- switch (pitem->type)
- {
- case CFG_ITEM_TYPE_INT:
- pitem->value = json_object_get_int (obj);
- break;
- case CFG_ITEM_TYPE_STRING:
- pitem->pvalue = (char *) json_object_get_string (obj);
- break;
- default:
- // print log here?
- return -1;
- }
- return 0;
-}
-
-NSTACK_STATIC inline void
-get_cfg_item (struct json_object *obj, int seg_index)
-{
- struct json_object *cfg_seg_obj = NULL;
- struct json_object *cfg_seg = NULL;
- struct json_object *cfg_item_obj[MAX_CFG_ITEM] = { 0 };
- int i = 0;
- int cfg_num = 0;
-
- (void) json_object_object_get_ex (obj, g_cfg_seg_name[seg_index],
- &cfg_seg_obj);
- if (NULL == cfg_seg_obj)
- {
- save_pre_init_log (NSLOG_ERR, "get config segment obj failed, seg:%s.",
- g_cfg_seg_name[seg_index]);
- return;
- }
-
- cfg_num = json_object_array_length (cfg_seg_obj);
- if (cfg_num < 1)
- {
- save_pre_init_log (NSLOG_ERR,
- "config segment count invalid, config segment %s, count %d.",
- g_cfg_seg_name[seg_index], cfg_num);
- return;
- }
-
- // each config segment just has 1 array element
- cfg_seg = (struct json_object *) json_object_array_get_idx (cfg_seg_obj, 0);
- if (NULL == cfg_seg)
- {
- save_pre_init_log (NSLOG_ERR, "no config item in seg %s.",
- g_cfg_seg_name[seg_index]);
- return;
- }
-
- for (; i < g_cfg_item_count[seg_index]; i++)
- {
- (void) json_object_object_get_ex (cfg_seg,
- g_cfg_item_info[seg_index][i].name,
- &cfg_item_obj[i]);
-
- if (NULL == cfg_item_obj[i])
- {
- save_pre_init_log (NSLOG_ERR,
- "get config item failed, config item %s.",
- g_cfg_item_info[seg_index][i].name);
- return;
- }
-
- // note: should specify the config item type if not only int item exist
- if (get_value_from_json_obj
- (cfg_item_obj[i], &g_cfg_item_info[seg_index][i]) != 0)
- {
- return;
- }
- }
-
- return;
-}
-
-NSTACK_STATIC inline void
-parse_cfg (char *cfg_buf)
-{
- if (NULL == cfg_buf)
- {
- return;
- }
-
- struct json_object *obj =
- (struct json_object *) json_tokener_parse (cfg_buf);
- int i = 0;
-
- for (; i < CFG_SEG_MAX; i++)
- {
- if (0 == g_cfg_item_count[i])
- {
- continue;
- }
-
- get_cfg_item (obj, i);
- }
-}
-
-NSTACK_STATIC inline int
-is_valid (int value, int min_value, int max_value)
-{
- if ((value < min_value) || (value > max_value))
- {
- return 0;
- }
-
- return 1;
-}
-
-NSTACK_STATIC inline void
-check_cfg_item_int (struct cfg_item_info *pitem)
-{
- if (!is_valid (pitem->value, pitem->min_value, pitem->max_value))
- {
- pitem->value = pitem->default_value;
- }
-}
-
-NSTACK_STATIC inline void
-check_cfg_item_string (struct cfg_item_info *pitem)
-{
- if ((NULL == pitem->pvalue) || ((pitem->pvalue) && (0 == pitem->pvalue[0])))
- {
- pitem->pvalue = pitem->default_str;
- }
-}
-
-NSTACK_STATIC inline void
-check_cfg_item (struct cfg_item_info *pitem)
-{
- switch (pitem->type)
- {
- case CFG_ITEM_TYPE_INT:
- check_cfg_item_int (pitem);
- if (pitem->custom_check)
- pitem->custom_check (pitem);
- break;
- case CFG_ITEM_TYPE_STRING:
- check_cfg_item_string (pitem);
- if (pitem->custom_check)
- pitem->custom_check (pitem);
- break;
- default:
- break;
- }
-}
-
-NSTACK_STATIC inline void
-check_cfg ()
-{
- int i = 0;
- int j = 0;
- for (i = 0; i < CFG_SEG_MAX; i++)
- {
- for (j = 0; j < g_cfg_item_count[i]; j++)
- {
- check_cfg_item (&g_cfg_item_info[i][j]);
- }
- }
-}
-
-NSTACK_STATIC inline void
-print_item_info (char *seg_name, struct cfg_item_info *pitem)
-{
- switch (pitem->type)
- {
- case CFG_ITEM_TYPE_INT:
- save_pre_init_log (NSLOG_INF, "config read seg:%s, name:%s, value:%d.",
- seg_name, pitem->name, pitem->value);
- break;
- case CFG_ITEM_TYPE_STRING:
- save_pre_init_log (NSLOG_INF, "config read seg:%s, name:%s, pvalue:%s.",
- seg_name, pitem->name, pitem->pvalue);
- break;
- default:
- break;
- }
-}
-
-NSTACK_STATIC inline void
-print_config_item_info ()
-{
- int i = 0;
- int j = 0;
- for (; i < CFG_SEG_MAX; i++)
- {
- for (j = 0; j < g_cfg_item_count[i]; j++)
- {
- print_item_info (g_cfg_seg_name[i], &g_cfg_item_info[i][j]);
- }
- }
-}
-
-void
-check_socket_config (void *pitem)
-{
- struct cfg_item_info *item = (struct cfg_item_info *) pitem;
- if (item->value > 0 && !(item->value & (item->value - 1)))
- return;
- save_pre_init_log (NSLOG_WAR,
- "warning: config socket_num (%u) is not 2^n, will use the default value:%u",
- item->value, item->default_value);
- item->value = item->default_value;
-}
-
-/* thread schedule mode and thread priority should be matched */
-void
-check_thread_config (void *pitem)
-{
- struct cfg_item_info *pri_cfg = (struct cfg_item_info *) pitem;
- struct cfg_item_info *policy_cfg =
- &g_cfg_item_info[CFG_SEG_PRI][CFG_SEG_THREAD_PRI_POLICY];
-
- int max_pri = sched_get_priority_max (policy_cfg->value);
- int min_pri = sched_get_priority_min (policy_cfg->value);
- if ((pri_cfg->value > max_pri) || (pri_cfg->value < min_pri))
- {
- save_pre_init_log (NSLOG_INF,
- "detect invalid thread priority configuration, use default value] policy=%d, pri=%d, def policy=%d, def pri=%d",
- policy_cfg->value, pri_cfg->value,
- policy_cfg->default_value, pri_cfg->default_value);
-
- policy_cfg->value = policy_cfg->default_value;
- pri_cfg->value = pri_cfg->default_value;
- }
-}
-
-#define SET_CFG_ITEM(seg, item, field, value) g_cfg_item_info[seg][item].field = (value)
-#define SET_THREAD_CFG_ITEM(item, field, value) SET_CFG_ITEM(CFG_SEG_PRI, item, field, value)
-
-NSTACK_STATIC void
-init_main_def_config_items ()
-{
- /* base config */
- g_cfg_seg_name[CFG_SEG_BASE] = "cfg_seg_socket";
- g_cfg_item_count[CFG_SEG_BASE] = CFG_SEG_BASE_MAX;
- /* -- socket number */
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_SOCKET_NUM].name = "socket_num";
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_SOCKET_NUM].type =
- CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_SOCKET_NUM].custom_check =
- check_socket_config;
- set_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_SOCKET_NUM, MIN_SOCKET_NUM,
- MAX_SOCKET_NUM, DEF_SOCKET_NUM);
- /* -- arp stale time */
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_STALE_TIME].name =
- "arp_stale_time";
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_STALE_TIME].type =
- CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_STALE_TIME].custom_check =
- NULL;
- set_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_ARP_STALE_TIME,
- MIN_ARP_STACLE_TIME, MAX_ARP_STACLE_TIME,
- DEF_ARP_STACLE_TIME);
- /* -- arp braodcast retransmission times */
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_BC_RETRANS_NUM].name =
- "arp_bc_retrans_num";
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_BC_RETRANS_NUM].type =
- CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_BASE][CFG_SEG_BASE_ARP_BC_RETRANS_NUM].custom_check
- = NULL;
- set_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_ARP_BC_RETRANS_NUM,
- MIN_ARP_BC_RETRANS_NUM, MAX_ARP_BC_RETRANS_NUM,
- DEF_ARP_BC_RETRANS_NUM);
-
- /* support thread priority configuration */
- g_cfg_seg_name[CFG_SEG_PRI] = "cfg_seg_thread_pri";
- g_cfg_item_count[CFG_SEG_PRI] = CFG_SEG_THREAD_PRI_MAX;
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_POLICY, name, "sched_policy");
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_POLICY, type, CFG_ITEM_TYPE_INT);
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_POLICY, custom_check, NULL);
- set_cfg_info (CFG_SEG_PRI, CFG_SEG_THREAD_PRI_POLICY, 0, 2, 0);
-
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_PRI, name, "thread_pri");
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_PRI, type, CFG_ITEM_TYPE_INT);
- SET_THREAD_CFG_ITEM (CFG_SEG_THREAD_PRI_PRI, custom_check,
- check_thread_config);
- set_cfg_info (CFG_SEG_PRI, CFG_SEG_THREAD_PRI_PRI, 0, 99, 0);
-
- /* remove unsed operation config set */
- /* log config */
- g_cfg_seg_name[CFG_SEG_LOG] = "cfg_seg_log";
- g_cfg_item_count[CFG_SEG_LOG] = 2;
- g_cfg_item_info[CFG_SEG_LOG][0].name = "run_log_size";
- g_cfg_item_info[CFG_SEG_LOG][0].type = CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_LOG][0].custom_check = NULL;
- g_cfg_item_info[CFG_SEG_LOG][1].name = "run_log_count";
- g_cfg_item_info[CFG_SEG_LOG][1].type = CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_LOG][1].custom_check = NULL;
- set_cfg_info (CFG_SEG_LOG, 0, 10, 100, 50);
- set_cfg_info (CFG_SEG_LOG, 1, 2, 20, 10);
-
- /* path config */
- /* set the path string and default str */
- g_cfg_seg_name[CFG_SEG_PATH] = "cfg_seg_path";
- g_cfg_item_count[CFG_SEG_PATH] = 1;
- g_cfg_item_info[CFG_SEG_PATH][0].name = "stackx_log_path";
- g_cfg_item_info[CFG_SEG_PATH][0].type = CFG_ITEM_TYPE_STRING;
- g_cfg_item_info[CFG_SEG_PATH][0].default_str = NSTACK_LOG_NAME;
- g_cfg_item_info[CFG_SEG_PATH][0].custom_check = NULL;
-}
-
-/* master and ctrl both use the function to reduce the redundancy,
-* as the parameter and operation all same.
-*/
-NSTACK_STATIC void
-init_master_def_config_items ()
-{
- int i = 0;
- for (; i < CFG_SEG_MAX; i++)
- {
- if (i != CFG_SEG_LOG)
- {
- g_cfg_item_count[i] = 0;
- }
- }
-
- g_cfg_seg_name[CFG_SEG_LOG] = "cfg_seg_log";
- g_cfg_item_count[CFG_SEG_LOG] = 2;
- g_cfg_item_info[CFG_SEG_LOG][0].name = "mon_log_size";
- g_cfg_item_info[CFG_SEG_LOG][0].type = CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_LOG][0].custom_check = NULL;
- g_cfg_item_info[CFG_SEG_LOG][1].name = "mon_log_count";
- g_cfg_item_info[CFG_SEG_LOG][1].type = CFG_ITEM_TYPE_INT;
- g_cfg_item_info[CFG_SEG_LOG][1].custom_check = NULL;
-
- set_cfg_info (CFG_SEG_LOG, 0, 2, 20, 10);
- set_cfg_info (CFG_SEG_LOG, 1, 2, 20, 10);
-
- g_cfg_seg_name[CFG_SEG_PATH] = "cfg_seg_path";
- g_cfg_item_count[CFG_SEG_PATH] = 1;
- g_cfg_item_info[CFG_SEG_PATH][0].name = "master_log_path";
- g_cfg_item_info[CFG_SEG_PATH][0].type = CFG_ITEM_TYPE_STRING;
- g_cfg_item_info[CFG_SEG_PATH][0].default_str = NSTACK_LOG_NAME;
- g_cfg_item_info[CFG_SEG_PATH][0].custom_check = NULL;
-}
-
-NSTACK_STATIC void
-read_init_config (u32 proc_type)
-{
- int cfg_buf_len = 0;
- char cfg_json_buf[CFG_BUFFER_LEN] = { 0 };
-
- cfg_buf_len = get_cfg_buf (proc_type, cfg_json_buf, sizeof (cfg_json_buf));
- if (cfg_buf_len < 0)
- {
- save_pre_init_log (NSLOG_WAR,
- "warning:file not exist, use default config.");
- return;
- }
- else
- {
- /* parse json buffer */
- parse_cfg (cfg_json_buf);
- }
- save_pre_init_log (NSLOG_INF, "read configuration finished.");
-}
-
-/* =========== set config items ========= */
-NSTACK_STATIC inline void
-set_base_config ()
-{
- g_base_cfg_items[CFG_BASE_RING_SIZE] = DEF_RING_BASE_SIZE;
- g_base_cfg_items[CFG_BASE_HAL_PORT_NUM] = DEF_HAL_PORT_NUM;
-
- g_base_cfg_items[CFG_BASE_SOCKET_NUM] =
- (u32) get_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_SOCKET_NUM);
- g_base_cfg_items[CFG_BASE_ARP_STALE_TIME] =
- (u32) get_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_ARP_STALE_TIME);
- g_base_cfg_items[CFG_BASE_ARP_BC_RETRANS_NUM] =
- (u32) get_cfg_info (CFG_SEG_BASE, CFG_SEG_BASE_ARP_BC_RETRANS_NUM);
-}
-
-NSTACK_STATIC void
-init_base_config (cfg_module_param * param)
-{
- /* initial default config */
- /* omc_ctrl single log file should be 10M */
- if (param->proc_type == NSFW_PROC_CTRL)
- {
- init_master_def_config_items ();
- }
- else
- {
- init_main_def_config_items ();
- }
-
- /* read base config from file */
- read_init_config (param->proc_type);
- /* check config and reset value */
- check_cfg ();
-
- /* print config info */
- print_config_item_info ();
-
- set_base_config ();
-}
-
-NSTACK_STATIC void
-init_stackx_config ()
-{
- u32 socket_num_per_thread = CUR_CFG_SOCKET_NUM;
- u32 factor = socket_num_per_thread / SOCKET_NUM_PER_THREAD;
-
- if (factor == 0 || socket_num_per_thread % SOCKET_NUM_PER_THREAD > 0)
- {
- factor += 1;
- }
-
- save_pre_init_log (NSLOG_INF, "socket num:%d, factor:%d",
- CUR_CFG_SOCKET_NUM, factor);
-
- /* MBUF config */
- set_custom_cfg_item (CFG_MBUF_DATA_SIZE, DEF_MBUF_DATA_SIZE);
- set_custom_cfg_item (CFG_TX_MBUF_NUM, DEF_TX_MBUF_POOL_SIZE);
- set_custom_cfg_item (CFG_RX_MBUF_NUM, DEF_RX_MBUF_POOL_SIZE);
- set_custom_cfg_item (CFG_MP_TCPSEG_NUM, DEF_MEMP_NUM_TCP_SEG); /* tcp segment number */
- set_custom_cfg_item (CFG_MP_MSG_NUM, DEF_TX_MSG_POOL_SIZE); /* msg number */
-
- /* ring config */
- set_custom_cfg_item (CFG_HAL_RX_RING_SIZE, DEF_HAL_RX_RING_SIZE); /* netif ring size not changed */
- set_custom_cfg_item (CFG_HAL_TX_RING_SIZE, DEF_HAL_TX_RING_SIZE); /* netif ring size not changed */
- set_custom_cfg_item (CFG_MBOX_RING_SIZE, DEF_MBOX_RING_SIZE);
- set_custom_cfg_item (CFG_SPL_MAX_RING_SIZE, DEF_SPL_MAX_RING_SIZE); /* stackx ring size */
-
- /* pcb config */
- set_custom_cfg_item (CFG_TCP_PCB_NUM, DEF_TCP_PCB_NUM * factor);
- set_custom_cfg_item (CFG_UDP_PCB_NUM, DEF_UDP_PCB_NUM * factor);
- set_custom_cfg_item (CFG_RAW_PCB_NUM, DEF_RAW_PCB_NUM * factor);
- set_custom_cfg_item (CFG_ARP_QUEUE_NUM,
- CUR_CFG_SOCKET_NUM >
- DEF_SOCKET_NUM ? LARGE_ARP_QUEUE_NUM :
- DEF_ARP_QUEUE_NUM);
-}
-
-void
-print_final_config_para ()
-{
- save_pre_init_log (NSLOG_INF, "socket_num :%u",
- get_base_cfg (CFG_BASE_SOCKET_NUM));
- save_pre_init_log (NSLOG_INF, "base_ring_size :%u",
- get_base_cfg (CFG_BASE_RING_SIZE));
- save_pre_init_log (NSLOG_INF, "hal_port_num :%u",
- get_base_cfg (CFG_BASE_HAL_PORT_NUM));
- save_pre_init_log (NSLOG_INF, "arp_stale_num :%u",
- get_base_cfg (CFG_BASE_ARP_STALE_TIME));
- save_pre_init_log (NSLOG_INF, "arp_bc_retrans_num :%u",
- get_base_cfg (CFG_BASE_ARP_BC_RETRANS_NUM));
-
- save_pre_init_log (NSLOG_INF, "mbuf_data_size :%u",
- get_custom_cfg (CFG_MBUF_DATA_SIZE));
- save_pre_init_log (NSLOG_INF, "tx_mbuf_num :%u",
- get_custom_cfg (CFG_TX_MBUF_NUM));
- save_pre_init_log (NSLOG_INF, "rx_mbuf_num :%u",
- get_custom_cfg (CFG_RX_MBUF_NUM));
- save_pre_init_log (NSLOG_INF, "tcp_seg_mp_num :%u",
- get_custom_cfg (CFG_MP_TCPSEG_NUM));
- save_pre_init_log (NSLOG_INF, "msg_mp_num :%u",
- get_custom_cfg (CFG_MP_MSG_NUM));
- save_pre_init_log (NSLOG_INF, "hal_tx_ring_size :%u",
- get_custom_cfg (CFG_HAL_TX_RING_SIZE));
- save_pre_init_log (NSLOG_INF, "hal_rx_ring_size :%u",
- get_custom_cfg (CFG_HAL_RX_RING_SIZE));
- save_pre_init_log (NSLOG_INF, "mbox_ring_size :%u",
- get_custom_cfg (CFG_MBOX_RING_SIZE));
- save_pre_init_log (NSLOG_INF, "spl_ring_size :%u",
- get_custom_cfg (CFG_SPL_MAX_RING_SIZE));
- save_pre_init_log (NSLOG_INF, "tcp_pcb_num :%u",
- get_custom_cfg (CFG_TCP_PCB_NUM));
- save_pre_init_log (NSLOG_INF, "udp_pcb_num :%u",
- get_custom_cfg (CFG_UDP_PCB_NUM));
- save_pre_init_log (NSLOG_INF, "raw_pcb_num :%u",
- get_custom_cfg (CFG_RAW_PCB_NUM));
-}
-
-NSTACK_STATIC void
-init_module_cfg_default ()
-{
- init_stackx_config ();
-
- print_final_config_para ();
-}
-
-NSTACK_STATIC void
-init_main_log_cfg_para ()
-{
- struct log_init_para log_para;
- log_para.run_log_size = g_cfg_item_info[CFG_SEG_LOG][0].value;
- log_para.run_log_count = g_cfg_item_info[CFG_SEG_LOG][1].value;
-
- /* log path valid check */
- if (0 == access (g_cfg_item_info[CFG_SEG_PATH][0].pvalue, W_OK))
- {
- log_para.run_log_path = g_cfg_item_info[CFG_SEG_PATH][0].pvalue;
- }
- else
- {
- log_para.run_log_path = g_cfg_item_info[CFG_SEG_PATH][0].default_str;
- }
-
- set_log_init_para (&log_para);
-}
-
-/* nStackCtrl is the diff process with main, cannot use main process info,
- need get the configure info respectively */
-/* omc_ctrl single log file should be 10M */
-NSTACK_STATIC void
-init_ctrl_log_cfg_para ()
-{
- struct log_init_para log_para;
- log_para.mon_log_size = g_cfg_item_info[CFG_SEG_LOG][0].value;
- log_para.mon_log_count = g_cfg_item_info[CFG_SEG_LOG][1].value;
-
- /* log path valid check */
- if (0 == access (g_cfg_item_info[CFG_SEG_PATH][0].pvalue, W_OK))
- {
- log_para.mon_log_path = g_cfg_item_info[CFG_SEG_PATH][0].pvalue;
- }
- else
- {
- log_para.mon_log_path = g_cfg_item_info[CFG_SEG_PATH][0].default_str;
- }
-
- set_log_init_para (&log_para);
-}
-
-/*===========config init for nstack main=============*/
-
-NSTACK_STATIC void
-init_module_cfg_nstackmain ()
-{
- /* init config data */
- init_module_cfg_default ();
-
- /* init log para */
- init_main_log_cfg_para ();
-}
-
-/*===========config init for nstack ctrl=============*/
-
-/* nStackCtrl is the diff process with main,
- cannot use main process info, need get the configure info respectively */
-
-NSTACK_STATIC void
-init_module_cfg_nstackctrl ()
-{
- init_ctrl_log_cfg_para ();
-}
-
-/*===========init config module=============*/
-void
-config_module_init (cfg_module_param * param)
-{
- save_pre_init_log (NSLOG_INF, "config module init begin] proc type=%d",
- param->proc_type);
-
- init_base_config (param);
-
- switch (param->proc_type)
- {
- case NSFW_PROC_MAIN:
- init_module_cfg_nstackmain ();
- break;
-
- case NSFW_PROC_CTRL:
- init_module_cfg_nstackctrl ();
- break;
-
- default:
- init_module_cfg_default ();
- break;
- }
-
- save_pre_init_log (NSLOG_INF, "config module init end.");
-}
-
-u32
-get_cfg_share_mem_size ()
-{
- return sizeof (g_base_cfg_items) + sizeof (g_custom_cfg_items);
-}
-
-int
-get_share_cfg_from_mem (void *mem)
-{
- if (EOK !=
- MEMCPY_S (g_base_cfg_items, sizeof (g_base_cfg_items), mem,
- sizeof (g_base_cfg_items)))
- {
- return -1;
- }
-
- char *custom_cfg_mem = (char *) mem + sizeof (g_base_cfg_items);
-
- if (EOK !=
- MEMCPY_S (g_custom_cfg_items, sizeof (g_custom_cfg_items),
- custom_cfg_mem, sizeof (g_custom_cfg_items)))
- {
- return -1;
- }
-
- return 0;
-}
-
-int
-set_share_cfg_to_mem (void *mem)
-{
- if (EOK !=
- MEMCPY_S (mem, sizeof (g_base_cfg_items), g_base_cfg_items,
- sizeof (g_base_cfg_items)))
- {
- return -1;
- }
-
- char *custom_cfg_mem = (char *) mem + sizeof (g_base_cfg_items);
-
- if (EOK !=
- MEMCPY_S (custom_cfg_mem, sizeof (g_custom_cfg_items),
- g_custom_cfg_items, sizeof (g_custom_cfg_items)))
- {
- return -1;
- }
-
- return 0;
-}
diff --git a/stacks/lwip_stack/src/maintain/nsfw_msg.c b/stacks/lwip_stack/src/maintain/nsfw_msg.c
deleted file mode 100644
index 338f803..0000000
--- a/stacks/lwip_stack/src/maintain/nsfw_msg.c
+++ /dev/null
@@ -1,23 +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 "nsfw_msg.h"
-/* *INDENT-OFF* */
-msg_fun g_msg_module_fun_array[MAX_MODULE_TYPE] = {NULL};
-msg_fun g_msg_module_major_fun_array[MAX_MODULE_TYPE][MAX_MAJOR_TYPE] = {{NULL}};
-msg_fun g_msg_module_major_minor_fun_array[MAX_MODULE_TYPE][MAX_MAJOR_TYPE][MAX_MINOR_TYPE] = {{{NULL}}};
-msg_fun g_msg_unsupport_fun = NULL;
-/* *INDENT-ON* */
diff --git a/stacks/lwip_stack/src/maintain/nsfw_rti.c b/stacks/lwip_stack/src/maintain/nsfw_rti.c
deleted file mode 100644
index e5a1d3c..0000000
--- a/stacks/lwip_stack/src/maintain/nsfw_rti.c
+++ /dev/null
@@ -1,92 +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 <stdlib.h>
-#include "types.h"
-#include "nstack_securec.h"
-#include "nsfw_init.h"
-#include "nstack_log.h"
-#include "nsfw_maintain_api.h"
-#include "nsfw_mem_api.h"
-#include "nsfw_rti.h"
-#include "nsfw_msg.h"
-#ifdef HAL_LIB
-#else
-#include "common_pal_bitwide_adjust.h"
-#endif
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C"{
-/* *INDENT-ON* */
-#endif /* __cplusplus */
-
-char g_dfx_switch = 1;
-
-struct rti_queue *g_nsfw_rti_primary_stat = NULL;
-
-void
-nsfw_rti_stat (nsfw_rti_stat_type_t statType, const data_com_msg * m)
-{
- if (!g_nsfw_rti_primary_stat || !m)
- {
- return;
- }
-
- struct rti_queue *primary_stat = ADDR_SHTOL (g_nsfw_rti_primary_stat);
-
- switch (statType)
- {
- case NSFW_STAT_PRIMARY_DEQ:
- if ((m->param.major_type >= MAX_MAJOR_TYPE)
- || (m->param.minor_type >= MAX_MINOR_TYPE))
- {
- return;
- }
- /*call_msg_fun() is only called in nStackMain, no reentrance risk, ++ operation is ok */
- primary_stat->tcpip_msg_deq[m->param.major_type]++;
- if (0 == m->param.major_type) //SPL_TCPIP_NEW_MSG_API
- {
- primary_stat->api_msg_deq[m->param.minor_type]++;
- }
- break;
- case NSFW_STAT_PRIMARY_ENQ_FAIL:
- if ((m->param.major_type >= MAX_MAJOR_TYPE)
- || (m->param.minor_type >= MAX_MINOR_TYPE))
- {
- return;
- }
- __sync_fetch_and_add (&primary_stat->tcpip_msg_enq_fail
- [m->param.major_type], 1);
- if (0 == m->param.major_type) //SPL_TCPIP_NEW_MSG_API
- {
- __sync_fetch_and_add (&primary_stat->api_msg_enq_fail
- [m->param.minor_type], 1);
- }
- break;
- case NSFW_STAT_PRIMARY_ENQ:
- //not use
- break;
- default:
- break;
- }
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif /* __cplusplus */
diff --git a/stacks/lwip_stack/src/nStackMain/CMakeLists.txt b/stacks/lwip_stack/src/nStackMain/CMakeLists.txt
deleted file mode 100644
index 24f6c9d..0000000
--- a/stacks/lwip_stack/src/nStackMain/CMakeLists.txt
+++ /dev/null
@@ -1,60 +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.
-#########################################################################
-
-FILE(GLOB_RECURSE MAIN *.c)
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE -pie")
-
-ADD_DEFINITIONS(-rdynamic -D__NSTACK_MAIN__)
-ADD_EXECUTABLE(nStackMain ${MAIN})
-TARGET_LINK_LIBRARIES(
- nStackMain
- -Wl,--whole-archive
- ${LIB_PATH_STATIC}/libjson-c.a
- ${LIB_PATH_STATIC}/libglog.a
- dmm_api
- nStackMaintain
- stacklwip
- nStackHal
- nStackAlarm
- nTcpdump
- -Wl,--no-whole-archive,-lstdc++ -ldl
- -Wl,--no-as-needed
- rte_eal
- rte_ethdev
- rte_mempool
- rte_ring
- rte_mbuf
- rte_pmd_ixgbe
- rte_pmd_virtio
- rte_pmd_e1000
- rte_pmd_vmxnet3_uio
- rte_pmd_bond
- rte_kvargs
- rte_cmdline
-)
-
-if(WITH_SECUREC_LIB)
-ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm stacklwip SECUREC)
-else()
-ADD_DEPENDENCIES(nStackMain nStackHal nStackMaintain nStackAlarm stacklwip)
-endif()
-
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_LIST_DIR}/../alarm/
- ${CMAKE_CURRENT_LIST_DIR}/../maintain/
- ${CMAKE_CURRENT_LIST_DIR}/../include/
-)
diff --git a/stacks/lwip_stack/src/nStackMain/main.c b/stacks/lwip_stack/src/nStackMain/main.c
deleted file mode 100644
index 3bc0a3b..0000000
--- a/stacks/lwip_stack/src/nStackMain/main.c
+++ /dev/null
@@ -1,429 +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 <signal.h>
-#include <stdio.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <sched.h>
-#include <fcntl.h>
-#include <malloc.h>
-#include "nstack_securec.h"
-#include "nstack_log.h"
-#include "types.h"
-#include "nsfw_init.h"
-#include "alarm_api.h"
-
-#include "nsfw_mgr_com_api.h"
-#include "nsfw_ps_mem_api.h"
-#include "nsfw_ps_api.h"
-#include "nsfw_recycle_api.h"
-#include "nsfw_fd_timer_api.h"
-#include "nsfw_maintain_api.h"
-#include "nstack_dmm_adpt.h"
-
-#include "nsfw_mem_api.h"
-#include "nsfw_mt_config.h"
-
-#define GLOBAL_Stack_ARG "stack"
-#define GlOBAL_HELP "--help"
-#define GLOBAL_Dpdk_ARG "dpdk"
-#define GLOBAL_STACK_PORT "-port"
-#define NSTACK_MAIN_MAX_PARA 32
-#define NSTACK_MAIN_MIN_PARA 1
-
-#define MAX_MASTER_OPEN_FD 1024
-
-extern int uStackArgIndex;
-extern void spl_tcpip_thread (void *arg);
-extern int globalArgc;
-extern char **gArgv;
-extern int g_dpdk_argc;
-extern char **g_dpdk_argv;
-extern void print_call_stack ();
-extern int adjust_mem_arg (int argc, char *argv[]);
-extern struct cfg_item_info g_cfg_item_info[CFG_SEG_MAX][MAX_CFG_ITEM];
-extern int get_network_json_data ();
-extern int get_ip_json_data ();
-
-#ifdef SYS_MEM_RES_STAT
-extern void get_resource_stat ();
-#endif
-
-extern alarm_result ms_alarm_check_func (void *para);
-int g_tcpip_thread_stat = 0; //this variable will be used at health check feature
-
-#if (DPDK_MODULE)
-extern void pal_common_usage (void);
-#endif
-
-typedef void (*pSignalFunc) (int);
-int app_init (void);
-
-void
-helpInfo ()
-{
- NSPOL_LOGERR
- ("-----------------------------------------------------------------"
- "\nThe format of arg" "\nbash:./nStackMain RTE-ARGS stack STACK-ARGS"
- "\n RTE-ARGS=-c COREMASK -n NUM [-b <domain:bus:devid.func>] [--socket-mem=MB,...] [-m MB] [-r NUM] [-v] [--file-prefix] [--proc-type <primary|secondary|auto>] [-- xen-dom0]"
- "\n STACK-ARGS=-port PORTMASK [-c COREMASK] [-thread NUM]"
- "\nUser examples:"
- "\nTo make the DPDK run on core mask:0xf,Number of memory channels per processor socket in DPDK is 3 "
- "\nTo make the stack run on eth coremask:f"
- "\nbash: ./nStackMain -c 0xf -n 3 stack -port f"
- "\nTo get more help info for stack:" "\n ./nStackMain --help stack"
- "\nTo get more help info for dpdk:" "\n ./nStackMain --help dpdk"
- "\n-----------------------------------------------------------------");
-
-#ifndef FOR_NSTACK_UT
- exit (0);
-#endif
-
-}
-
-#define SIG_PTRACE __SIGRTMIN + 5
-
-void
-signal_handler (int s)
-{
- NSPOL_LOGERR ("Received signal exiting.]s=%d", s);
- if (s == SIGSEGV) /* add for gdb attach work */
- {
- print_call_stack ();
- }
-
- nstack_segment_error (s);
- if ((SIG_PTRACE != s) && (SIG_PTRACE + 2 != s))
- {
-#ifndef FOR_NSTACK_UT
- exit (0);
-#endif
- }
-
- int i;
- for (i = 0; i < MAX_THREAD; i++)
- {
- if (g_all_thread[i] != pthread_self () && 0 != g_all_thread[i])
- {
- NSFW_LOGERR ("send sig thread %d", g_all_thread[i]);
- if (0 == pthread_kill (g_all_thread[i], SIG_PTRACE + 2))
- {
- return;
- }
- }
- g_all_thread[i] = 0;
- }
-
- for (i = 0; i < MAX_THREAD; i++)
- {
- if (0 != g_all_thread[i])
- {
- return;
- }
- }
-
-#ifndef FOR_NSTACK_UT
- exit (0);
-#endif
-
- //dpdk_signal_handler();
-}
-
-void
-register_signal_handler ()
-{
-/* donot catch SIGHUP SIGTERM */
- static const int s_need_handle_signals[] = {
- SIGABRT,
- SIGBUS,
- SIGFPE,
- SIGILL,
- SIGIOT,
- SIGQUIT,
- SIGSEGV,
- //SIGTRAP,
- SIGXCPU,
- SIGXFSZ,
- //SIGALRM,
- //SIGHUP,
- SIGINT,
- //SIGKILL,
- SIGPIPE,
- SIGPROF,
- SIGSYS,
- //SIGTERM,
- SIGUSR1,
- SIGUSR2,
- //SIGVTALRM,
- //SIGSTOP,
- //SIGTSTP,
- //SIGTTIN,
- //SIGTTOU
- };
-
- /* here mask signal that will use in sigwait() */
- sigset_t waitset, oset;
-
- if (0 != sigemptyset (&waitset))
- {
- NSPOL_LOGERR ("sigemptyset failed.");
- }
- sigaddset (&waitset, SIGRTMIN); /* for timer */
- sigaddset (&waitset, SIGRTMIN + 2);
- pthread_sigmask (SIG_BLOCK, &waitset, &oset);
- unsigned int i = 0;
-
- struct sigaction s;
- s.sa_handler = signal_handler;
- if (0 != sigemptyset (&s.sa_mask))
- {
- NSPOL_LOGERR ("sigemptyset failed.");
- }
-
- s.sa_flags = (int) SA_RESETHAND;
-
- /* register sig handler for more signals */
- for (i = 0; i < sizeof (s_need_handle_signals) / sizeof (int); i++)
- {
- if (sigaction (s_need_handle_signals[i], &s, NULL) != 0)
- {
- NSPOL_LOGERR ("Could not register %d signal handler.",
- s_need_handle_signals[i]);
- }
-
- }
-
-}
-
-void
-checkArgs (int argc, char **argv)
-{
- int uStackArg = 0; //mark the status whether need helpinfo and return
- int i;
- const unsigned int global_para_length = 5; //GLOBAL_Stack_ARG "stack" and GLOBAL_STACK_PORT "-port" string length, both are 5
- const unsigned int global_help_length = 6; //GlOBAL_HELP "--help" string length is 6
- const unsigned int global_dpdk_length = 4; //GLOBAL_Dpdk_ARG "dpdk" string length is 4
-
- for (i = 0; i < argc; i++)
- {
- if (argc > 1)
- {
- if (strncmp (argv[i], GLOBAL_Stack_ARG, global_para_length) == 0)
- {
- if (i < 5)
- {
- NSPOL_LOGERR ("Too less args");
- helpInfo ();
- return;
- }
-
- uStackArg = 1;
- uStackArgIndex = i;
- continue;
- }
-
- if (strncmp (argv[i], GLOBAL_STACK_PORT, global_para_length) == 0)
- {
- continue;
- }
-
- if (strncmp (argv[i], GlOBAL_HELP, global_help_length) == 0)
- {
- if (i == (argc - 1))
- {
- helpInfo ();
- return;
- }
- else if ((++i < argc)
- &&
- (strncmp (argv[i], GLOBAL_Dpdk_ARG, global_dpdk_length)
- == 0))
- {
-#if (DPDK_MODULE != 1)
- //eal_common_usage();
-#else
- pal_common_usage ();
-#endif
- return;
- }
- else
- {
- helpInfo ();
- return;
- }
- }
- }
- else
- {
- NSPOL_LOGERR ("Too less args");
- helpInfo ();
- return;
- }
- }
-
- if (!uStackArg)
- {
- helpInfo ();
- return;
- }
-}
-
-extern u64 timer_get_threadid ();
-
-#ifdef FOR_NSTACK_UT
-int
-nstack_main (void)
-{
- int argc;
-
- char *argv[NSTACK_MAIN_MAX_PARA];
- argv[0] = "nStackMain";
- argv[1] = "-c";;
- argv[2] = "0xffffffff";
- argv[3] = "-n";
- argv[4] = "3";
- argv[5] = "stack";
- argv[6] = "-port";
- argv[7] = "288";
- argv[8] = "-c";
- argv[9] = "2";
- argc = 10;
-
-#else
-int
-main (int argc, char *argv[])
-{
-#endif
- fw_poc_type proc_type = NSFW_PROC_MAIN;
-
- /* although nStackMaster has set close on exec, here can't be removed.
- * in upgrade senario, if Master is old which has not set close on exec, here,
- * if new version Main not close, problem will reappear. Add Begin*/
- int i;
- for (i = 4; i < MAX_MASTER_OPEN_FD; i++)
- {
- close (i);
- }
-
- cfg_module_param config_para;
- config_para.proc_type = proc_type;
- config_para.argc = argc;
- config_para.argv = (unsigned char **) argv;
- config_module_init (&config_para);
-
- set_log_proc_type (LOG_PRO_NSTACK);
- (void) nstack_log_init ();
-
-// nstack_tracing_enable();
- if (0 != nsfw_proc_start_with_lock (NSFW_PROC_MAIN))
- {
- NSFW_LOGERR ("another process is running!!");
- return 0;
- }
-
- if (1 != mallopt (M_ARENA_MAX, 1))
- {
- NSPOL_LOGERR ("Error: mallopt fail, continue init");
- }
-
- /* Set different mem args to PAL and EAL */
- INITPOL_LOGINF ("main_thread", "adjust_mem_arg init", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_START);
- if (adjust_mem_arg (argc, argv))
- {
- INITPOL_LOGERR ("main_thread", "adjust_mem_arg init", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_FAIL);
- return -1;
- }
- INITPOL_LOGINF ("main_thread", "adjust_mem_arg init", NULL_STRING,
- LOG_INVALID_VALUE, MODULE_INIT_SUCCESS);
-
- checkArgs (globalArgc, gArgv);
- register_signal_handler ();
-
- (void) signal (SIG_PTRACE, signal_handler);
- (void) signal (SIG_PTRACE + 2, signal_handler);
-
- if (nsfw_mgr_comm_fd_init (NSFW_PROC_MAIN) < 0)
- {
- NSFW_LOGERR ("nsfw_mgr_comm_fd_init failed");
- }
-
- (void) nsfw_reg_trace_thread (pthread_self ());
-
- (void) nstack_framework_setModuleParam (NSFW_ALARM_MODULE,
- (void *) ((u64) proc_type));
- (void) nstack_framework_setModuleParam (TCPDUMP_MODULE,
- (void *) ((u64) proc_type));
-
- nstack_dmm_para stpara;
- stpara.argc = uStackArgIndex;
- stpara.argv = gArgv;
- stpara.deploy_type = NSTACK_MODEL_TYPE3;
- stpara.proc_type = NSFW_PROC_MAIN;
- stpara.attr.policy = get_cfg_info (CFG_SEG_PRI, CFG_SEG_THREAD_PRI_POLICY);
- stpara.attr.pri = get_cfg_info (CFG_SEG_PRI, CFG_SEG_THREAD_PRI_PRI);
-
- if (nstack_adpt_init (&stpara) != 0)
- {
- NSFW_LOGERR ("nstack adpt init fail");
- return -1;
- }
-
- ns_send_init_alarm (ALARM_EVENT_NSTACK_MAIN_ABNORMAL);
-
- while (!timer_get_threadid ())
- {
- (void) nsfw_thread_chk ();
- sys_sleep_ns (0, 500000000);
- }
- (void) nsfw_thread_chk_unreg ();
- NSFW_LOGINF ("tcpip thread start!");
- (void) sleep (2);
-
- NSFW_LOGINF ("read configuration!");
- if (0 != get_network_json_data ())
- {
- NSFW_LOGINF ("get_network_json_data error");
- return -1;
- }
-
- if (0 != get_ip_json_data ())
- {
- NSFW_LOGINF ("get_ip_json_data error");
- return -1;
- }
-
- int ep_thread = 0;
- while (1)
- {
-#ifdef SYS_MEM_RES_STAT
- get_resource_stat ();
-#endif
- (void) sleep (3);
- ep_thread = nsfw_mgr_com_chk_hbt (1);
- if (ep_thread > 0)
- {
- NSFW_LOGINF ("force release lock");
- (void) nsfw_recycle_rechk_lock ();
- }
-#ifdef FOR_NSTACK_UT
- return 0;
-#endif
-
- }
-}
diff --git a/stacks/lwip_stack/src/sbr/CMakeLists.txt b/stacks/lwip_stack/src/sbr/CMakeLists.txt
deleted file mode 100644
index f324e5f..0000000
--- a/stacks/lwip_stack/src/sbr/CMakeLists.txt
+++ /dev/null
@@ -1,30 +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.
-#########################################################################
-
-if(WITH_HAL_LIB)
-else()
- SET(PAL_H_DIRECTORIES "/usr/include/dpdk/")
-endif()
-
-
-FILE(GLOB SBR *.c)
-ADD_LIBRARY(lwip_dpdk SHARED ${SBR})
-TARGET_LINK_LIBRARIES(lwip_dpdk -Wl,--whole-archive socket -Wl,--no-whole-archive dmm_api nStackMaintain)
-ADD_DEPENDENCIES(lwip_dpdk socket DPDK)
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_LIST_DIR}/../include
- ${PAL_H_DIRECTORIES}
-)
diff --git a/stacks/lwip_stack/src/sbr/sbr_err.h b/stacks/lwip_stack/src/sbr/sbr_err.h
deleted file mode 100644
index be3bc3b..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_err.h
+++ /dev/null
@@ -1,191 +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.
-*/
-
-#ifndef SBR_ERR_H
-#define SBR_ERR_H
-#include <errno.h>
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#ifdef SBR_PROVIDE_ERRNO
-#define EPERM 1 /* Operation not permitted */
-#define ENOENT 2 /* No such file or directory */
-#define ESRCH 3 /* No such process */
-#define EINTR 4 /* Interrupted system call */
-#define EIO 5 /* I/O error */
-#define ENXIO 6 /* No such device or address */
-#define E2BIG 7 /* Arg list too long */
-#define ENOEXEC 8 /* Exec format error */
-#define EBADF 9 /* Bad file number */
-#define ECHILD 10 /* No child processes */
-#define EAGAIN 11 /* Try again */
-#define ENOMEM 12 /* Out of memory */
-#define EACCES 13 /* Permission denied */
-#define EFAULT 14 /* Bad address */
-#define ENOTBLK 15 /* Block device required */
-#define EBUSY 16 /* Device or resource busy */
-#define EEXIST 17 /* File exists */
-#define EXDEV 18 /* Cross-device link */
-#define ENODEV 19 /* No such device */
-#define ENOTDIR 20 /* Not a directory */
-#define EISDIR 21 /* Is a directory */
-#define EINVAL 22 /* Invalid argument */
-#define ENFILE 23 /* File table overflow */
-#define EMFILE 24 /* Too many open files */
-#define ENOTTY 25 /* Not a typewriter */
-#define ETXTBSY 26 /* Text file busy */
-#define EFBIG 27 /* File too large */
-#define ENOSPC 28 /* No space left on device */
-#define ESPIPE 29 /* Illegal seek */
-#define EROFS 30 /* Read-only file system */
-#define EMLINK 31 /* Too many links */
-#define EPIPE 32 /* Broken pipe */
-#define EDOM 33 /* Math argument out of domain of func */
-#define ERANGE 34 /* Math result not representable */
-#define EDEADLK 35 /* Resource deadlock would occur */
-#define ENAMETOOLONG 36 /* File name too long */
-#define ENOLCK 37 /* No stored locks available */
-#define ENOSYS 38 /* Function not implemented */
-#define ENOTEMPTY 39 /* Directory not empty */
-#define ELOOP 40 /* Too many symbolic links encountered */
-#define EWOULDBLOCK EAGAIN /* Operation would block */
-#define ENOMSG 42 /* No message of desired type */
-#define EIDRM 43 /* Identifier removed */
-#define ECHRNG 44 /* Channel number out of range */
-#define EL2NSYNC 45 /* Level 2 not synchronized */
-#define EL3HLT 46 /* Level 3 halted */
-#define EL3RST 47 /* Level 3 reset */
-#define ELNRNG 48 /* Link number out of range */
-#define EUNATCH 49 /* Protocol driver not attached */
-#define ENOCSI 50 /* No CSI structure available */
-#define EL2HLT 51 /* Level 2 halted */
-#define EBADE 52 /* Invalid exchange */
-#define EBADR 53 /* Invalid request descriptor */
-#define EXFULL 54 /* Exchange full */
-#define ENOANO 55 /* No anode */
-#define EBADRQC 56 /* Invalid request code */
-#define EBADSLT 57 /* Invalid slot */
-
-#define EDEADLOCK EDEADLK
-
-#define EBFONT 59 /* Bad font file format */
-#define ENOSTR 60 /* Device not a stream */
-#define ENODATA 61 /* No data available */
-#define ETIME 62 /* Timer expired */
-#define ENOSR 63 /* Out of streams resources */
-#define ENONET 64 /* Machine is not on the network */
-#define ENOPKG 65 /* Package not installed */
-#define EREMOTE 66 /* Object is remote */
-#define ENOLINK 67 /* Link has been severed */
-#define EADV 68 /* Advertise error */
-#define ESRMNT 69 /* Srmount error */
-#define ECOMM 70 /* Communication error on send */
-#define EPROTO 71 /* Protocol error */
-#define EMULTIHOP 72 /* Multihop attempted */
-#define EDOTDOT 73 /* RFS specific error */
-#define EBADMSG 74 /* Not a data message */
-#define EOVERFLOW 75 /* Value too large for defined data type */
-#define ENOTUNIQ 76 /* Name not unique on network */
-#define EBADFD 77 /* File descriptor in bad state */
-#define EREMCHG 78 /* Remote address changed */
-#define ELIBACC 79 /* Can not access a needed shared library */
-#define ELIBBAD 80 /* Accessing a corrupted shared library */
-#define ELIBSCN 81 /* .lib section in a.out corrupted */
-#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
-#define ELIBEXEC 83 /* Cannot exec a shared library directly */
-#define EILSEQ 84 /* Illegal byte sequence */
-#define ERESTART 85 /* Interrupted system call should be restarted */
-#define ESTRPIPE 86 /* Streams pipe error */
-#define EUSERS 87 /* Too many users */
-#define ENOTSOCK 88 /* Socket operation on non-socket */
-#define EDESTADDRREQ 89 /* Destination address required */
-#define EMSGSIZE 90 /* Message too long */
-#define EPROTOTYPE 91 /* Protocol wrong type for socket */
-#define ENOPROTOOPT 92 /* Protocol not available */
-#define EPROTONOSUPPORT 93 /* Protocol not supported */
-#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
-#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
-#define EPFNOSUPPORT 96 /* Protocol family not supported */
-#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
-#define EADDRINUSE 98 /* Address already in use */
-#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
-#define ENETDOWN 100 /* Network is down */
-#define ENETUNREACH 101 /* Network is unreachable */
-#define ENETRESET 102 /* Network dropped connection because of reset */
-#define ECONNABORTED 103 /* Software caused connection abort */
-#define ECONNRESET 104 /* Connection reset by peer */
-#define ENOBUFS 105 /* No buffer space available */
-#define EISCONN 106 /* Transport endpoint is already connected */
-#define ENOTCONN 107 /* Transport endpoint is not connected */
-#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
-#define ETOOMANYREFS 109 /* Too many references: cannot splice */
-#define ETIMEDOUT 110 /* Connection timed out */
-#define ECONNREFUSED 111 /* Connection refused */
-#define EHOSTDOWN 112 /* Host is down */
-#define EHOSTUNREACH 113 /* No route to host */
-#define EALREADY 114 /* Operation already in progress */
-#define EINPROGRESS 115 /* Operation now in progress */
-#define ESTALE 116 /* Stale NFS file handle */
-#define EUCLEAN 117 /* Structure needs cleaning */
-#define ENOTNAM 118 /* Not a XENIX named type file */
-#define ENAVAIL 119 /* No XENIX semaphores available */
-#define EISNAM 120 /* Is a named type file */
-#define EREMOTEIO 121 /* Remote I/O error */
-#define EDQUOT 122 /* Quota exceeded */
-
-#define ENOMEDIUM 123 /* No medium found */
-#define EMEDIUMTYPE 124 /* Wrong medium type */
-
-#define ENSROK 0
-#define ENSRNODATA 160
-#define ENSRFORMERR 161
-#define ENSRSERVFAIL 162
-#define ENSRNOTFOUND 163
-#define ENSRNOTIMP 164
-#define ENSRREFUSED 165
-#define ENSRBADQUERY 166
-#define ENSRBADNAME 167
-#define ENSRBADFAMILY 168
-#define ENSRBADRESP 169
-#define ENSRCONNREFUSED 170
-#define ENSRTIMEOUT 171
-#define ENSROF 172
-#define ENSRFILE 173
-#define ENSRNOMEM 174
-#define ENSRDESTRUCTION 175
-#define ENSRQUERYDOMAINTOOLONG 176
-#define ENSRCNAMELOOP 177
-#define OPTION_DEG 200
-
-#endif
-
-static inline void
-sbr_set_errno (int err)
-{
- errno = err;
-}
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/sbr/sbr_index_ring.c b/stacks/lwip_stack/src/sbr/sbr_index_ring.c
deleted file mode 100644
index 0daa465..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_index_ring.c
+++ /dev/null
@@ -1,212 +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 <string.h>
-#include "sbr_index_ring.h"
-#include "nstack_securec.h"
-#include "common_mem_common.h"
-#include "common_func.h"
-
-/*****************************************************************************
-* Prototype : sbr_init_index_ring
-* Description : init index ring
-* Input : sbr_index_ring* ring
-* u32 num
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_init_index_ring (sbr_index_ring * ring, u32 num)
-{
- u32 loop;
-
- ring->head = 0;
- ring->tail = 0;
- ring->num = num;
- ring->mask = num - 1;
-
- for (loop = 0; loop < num; loop++)
- {
- ring->nodes[loop].ver = (loop - num);
- ring->nodes[loop].val = 0;
- }
-}
-
-/*****************************************************************************
-* Prototype : sbr_create_index_ring
-* Description : create index ring
-* Input : u32 num
-* Output : None
-* Return Value : sbr_index_ring*
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-sbr_index_ring *
-sbr_create_index_ring (u32 num)
-{
- num = common_mem_align32pow2 (num + 1);
- sbr_index_ring *ring =
- (sbr_index_ring *) malloc (sizeof (sbr_index_ring) +
- num * sizeof (sbr_index_node));
- if (!ring)
- {
- return NULL;
- }
-
- sbr_init_index_ring (ring, num);
- return ring;
-}
-
-/*****************************************************************************
-* Prototype : sbr_index_ring_enqueue
-* Description : enqueue data,val != 0
-* Input : sbr_index_ring* ring
-* i32 val
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_index_ring_enqueue (sbr_index_ring * ring, i32 val)
-{
- if (0 == val)
- {
- return -1;
- }
-
- sbr_index_node expect_node;
- sbr_index_node cur_node;
- u32 tmp_head;
- u32 tmp_tail;
- u32 cur_head = ring->head;
- u32 mask = ring->mask;
- u32 size = ring->num;
-
- do
- {
- tmp_tail = ring->tail;
- if (tmp_tail + size - cur_head == 0)
- {
- if (ring->nodes[tmp_tail & mask].val == 0)
- {
- (void) __sync_bool_compare_and_swap (&ring->tail, tmp_tail,
- tmp_tail + 1);
- }
- else
- {
- return 0;
- }
- }
-
- expect_node.ver = cur_head - size;
- expect_node.val = 0;
-
- cur_node.ver = cur_head;
- cur_node.val = val;
-
- if ((ring->nodes[cur_head & mask].ver == expect_node.ver)
- && __sync_bool_compare_and_swap (&ring->nodes[cur_head & mask].data,
- expect_node.data, cur_node.data))
- {
- tmp_head = ring->head;
- if ((tmp_head - cur_head > 0x80000000) && (0 == (cur_head & 0x11)))
- {
- (void) __sync_bool_compare_and_swap (&ring->head, tmp_head,
- cur_head);
- }
-
- break;
- }
-
- tmp_head = ring->head;
- cur_head = cur_head - tmp_head < mask - 1 ? cur_head + 1 : tmp_head;
- }
- while (1);
-
- return 1;
-}
-
-/*****************************************************************************
-* Prototype : sbr_index_ring_dequeue
-* Description : dequeue
-* Input : sbr_index_ring* ring
-* i32* val
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_index_ring_dequeue (sbr_index_ring * ring, i32 * val)
-{
- u32 cur_tail;
- u32 tmp_tail;
- u32 tmp_head;
- u32 mask = ring->mask;
- sbr_index_node null_node;
- sbr_index_node expect_node;
-
- cur_tail = ring->tail;
- do
- {
- tmp_head = ring->head;
- if (cur_tail == tmp_head)
- {
- if (0 != (ring->nodes[tmp_head & mask].val))
- {
- (void) __sync_bool_compare_and_swap (&ring->head, tmp_head,
- tmp_head + 1);
- }
- else
- {
- return 0;
- }
- }
-
- null_node.ver = cur_tail;
- null_node.val = 0;
- expect_node = ring->nodes[cur_tail & mask];
-
- if ((null_node.ver == expect_node.ver) && (expect_node.val)
- && __sync_bool_compare_and_swap (&ring->nodes[cur_tail & mask].data,
- expect_node.data, null_node.data))
-
- {
- *val = expect_node.val;
- tmp_tail = ring->tail;
- if ((tmp_tail - cur_tail > 0x80000000) && (0 == (cur_tail & 0x11)))
- {
- (void) __sync_bool_compare_and_swap (&ring->tail, tmp_tail,
- cur_tail);
- }
-
- break;
- }
-
- tmp_tail = ring->tail;
- cur_tail = cur_tail - tmp_tail < mask - 1 ? cur_tail + 1 : tmp_tail;
- }
- while (1);
-
- return 1;
-}
diff --git a/stacks/lwip_stack/src/sbr/sbr_index_ring.h b/stacks/lwip_stack/src/sbr/sbr_index_ring.h
deleted file mode 100644
index 86e8345..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_index_ring.h
+++ /dev/null
@@ -1,61 +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.
-*/
-
-#ifndef _SBR_INDEX_RING_H_
-#define _SBR_INDEX_RING_H_
-
-#include "types.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef struct
-{
- union
- {
- struct
- {
- volatile u32 ver;
- volatile u32 val;
- };
- u64 data;
- };
-} sbr_index_node;
-
-typedef struct
-{
- volatile u32 head;
- i8 cache_space[124];
- volatile u32 tail;
- u32 num;
- u32 mask;
- sbr_index_node nodes[0];
-} sbr_index_ring;
-
-sbr_index_ring *sbr_create_index_ring (u32 num);
-int sbr_index_ring_enqueue (sbr_index_ring * ring, i32 val);
-int sbr_index_ring_dequeue (sbr_index_ring * ring, i32 * val);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/sbr/sbr_protocol_api.h b/stacks/lwip_stack/src/sbr/sbr_protocol_api.h
deleted file mode 100644
index 95ca565..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_protocol_api.h
+++ /dev/null
@@ -1,103 +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.
-*/
-
-#ifndef SBR_PROTOCOL_API_H
-#define SBR_PROTOCOL_API_H
-#include <sys/uio.h>
-#include <sys/epoll.h>
-#include <netinet/in.h>
-#include "sbr_err.h"
-#include "nsfw_msg_api.h"
-#include "nsfw_mt_config.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-#ifndef SBR_MAX_INTEGER
-#define SBR_MAX_INTEGER 0x7FFFFFFF
-#endif
-
-#ifndef socklen_t
-#define socklen_t u32
-#endif
-
-#define SBR_MAX_FD_NUM MAX_SOCKET_NUM
-
-typedef struct sbr_socket_s sbr_socket_t;
-typedef struct
-{
- int (*socket) (sbr_socket_t *, int, int, int);
- int (*bind) (sbr_socket_t *, const struct sockaddr *, socklen_t);
- int (*listen) (sbr_socket_t *, int);
- int (*accept) (sbr_socket_t *, sbr_socket_t *, struct sockaddr *,
- socklen_t *);
- int (*accept4) (sbr_socket_t *, sbr_socket_t *, struct sockaddr *,
- socklen_t *, int);
- int (*connect) (sbr_socket_t *, const struct sockaddr *, socklen_t);
- int (*shutdown) (sbr_socket_t *, int);
- int (*getsockname) (sbr_socket_t *, struct sockaddr *, socklen_t *);
- int (*getpeername) (sbr_socket_t *, struct sockaddr *, socklen_t *);
- int (*getsockopt) (sbr_socket_t *, int, int, void *, socklen_t *);
- int (*setsockopt) (sbr_socket_t *, int, int, const void *, socklen_t);
- int (*recvfrom) (sbr_socket_t *, void *, size_t, int, struct sockaddr *,
- socklen_t *);
- int (*readv) (sbr_socket_t *, const struct iovec *, int);
- int (*recvmsg) (sbr_socket_t *, struct msghdr *, int);
- int (*send) (sbr_socket_t *, const void *, size_t, int);
- int (*sendto) (sbr_socket_t *, const void *, size_t, int,
- const struct sockaddr *, socklen_t);
- int (*sendmsg) (sbr_socket_t *, const struct msghdr *, int);
- int (*writev) (sbr_socket_t *, const struct iovec *, int);
- int (*fcntl) (sbr_socket_t *, int, long);
- int (*ioctl) (sbr_socket_t *, unsigned long, void *);
- int (*close) (sbr_socket_t *);
- int (*peak) (sbr_socket_t *);
- void (*lock_common) (sbr_socket_t *);
- void (*unlock_common) (sbr_socket_t *);
- void (*fork_parent) (sbr_socket_t *, pid_t);
- void (*fork_child) (sbr_socket_t *, pid_t, pid_t);
- unsigned int (*ep_ctl) (sbr_socket_t *, int triggle_ops,
- struct epoll_event * event, void *pdata);
- unsigned int (*ep_getevt) (sbr_socket_t *, unsigned int events);
- void (*set_app_info) (sbr_socket_t *, void *appinfo);
- void (*set_close_stat) (sbr_socket_t *, int flag);
-} sbr_fdopt;
-
-struct sbr_socket_s
-{
- int fd;
- sbr_fdopt *fdopt;
- void *stack_obj;
- void *sk_obj;
-};
-
-int sbr_init_protocol ();
-int sbr_fork_protocol ();
-sbr_fdopt *sbr_get_fdopt (int domain, int type, int protocol);
-void sbr_app_touch_in (void); /*app send its version info to nStackMain */
-int lwip_try_select (int fdsize, fd_set * fdread, fd_set * fdwrite,
- fd_set * fderr, struct timeval *timeout);
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/sbr/sbr_res_mgr.c b/stacks/lwip_stack/src/sbr/sbr_res_mgr.c
deleted file mode 100644
index f40f101..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_res_mgr.c
+++ /dev/null
@@ -1,88 +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 "nstack_securec.h"
-#include "sbr_res_mgr.h"
-
-sbr_res_group g_res_group = { };
-
-/*****************************************************************************
-* Prototype : sbr_init_sk
-* Description : init sock pool
-* Input : None
-* Output : None
-* Return Value : static int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-NSTACK_STATIC int
-sbr_init_sk ()
-{
- sbr_index_ring *ring = sbr_create_index_ring (SBR_MAX_FD_NUM - 1);
-
- if (!ring)
- {
- NSSBR_LOGERR ("init ring failed");
- return -1;
- }
-
- int i;
- /*the queue can't accept value=0, so i begin with 1 */
- for (i = 1; i <= SBR_MAX_FD_NUM; ++i)
- {
- g_res_group.sk[i].fd = i;
- if (sbr_index_ring_enqueue (ring, i) != 1)
- {
- NSSBR_LOGERR ("sbr_index_ring_enqueue failed, this can not happen");
- free (ring);
- return -1;
- }
- }
-
- g_res_group.sk_ring = ring;
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : sbr_init_res
-* Description : init sbr res
-* Input : None
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-sbr_init_res ()
-{
- if (sbr_init_sk () != 0)
- {
- return -1;
- }
-
- NSSBR_LOGDBG ("init socket ok");
-
- if (sbr_init_protocol () != 0)
- {
- return -1;
- }
-
- NSSBR_LOGDBG ("init protocol ok");
-
- return 0;
-}
diff --git a/stacks/lwip_stack/src/sbr/sbr_res_mgr.h b/stacks/lwip_stack/src/sbr/sbr_res_mgr.h
deleted file mode 100644
index e731314..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_res_mgr.h
+++ /dev/null
@@ -1,159 +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.
-*/
-
-#ifndef SBR_RES_MGR_H
-#define SBR_RES_MGR_H
-#include "sbr_protocol_api.h"
-#include "sbr_index_ring.h"
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-typedef struct
-{
- sbr_index_ring *sk_ring;
- sbr_socket_t sk[SBR_MAX_FD_NUM + 1]; /* unuse index 0 */
-} sbr_res_group;
-
-extern sbr_res_group g_res_group;
-
-/*****************************************************************************
-* Prototype : sbr_malloc_sk
-* Description : malloc sock
-* Input : None
-* Output : None
-* Return Value : static inline sbr_socket_t *
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline sbr_socket_t *
-sbr_malloc_sk ()
-{
- int fd;
-
- if (sbr_index_ring_dequeue (g_res_group.sk_ring, &fd) != 1)
- {
- NSSBR_LOGERR ("malloc sk failed]");
- sbr_set_errno (EMFILE);
- return NULL;
- }
-
- NSSBR_LOGDBG ("malloc sk ok]fd=%d", fd);
- return &g_res_group.sk[fd];
-}
-
-/*****************************************************************************
-* Prototype : sbr_free_sk
-* Description : free sock
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_free_sk (sbr_socket_t * sk)
-{
- sk->fdopt = NULL;
- sk->sk_obj = NULL;
- sk->stack_obj = NULL;
-
- if (sbr_index_ring_enqueue (g_res_group.sk_ring, sk->fd) != 1)
- {
- NSSBR_LOGERR ("sbr_index_ring_enqueue failed, this can not happen");
- }
-
- NSSBR_LOGDBG ("free sk ok]fd=%d", sk->fd);
-}
-
-/*****************************************************************************
-* Prototype : sbr_lookup_sk
-* Description : lookup socket
-* Input : int fd
-* Output : None
-* Return Value : static inline sbr_socket_t *
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline sbr_socket_t *
-sbr_lookup_sk (int fd)
-{
- if ((fd < 1) || (fd > SBR_MAX_FD_NUM))
- {
- NSSBR_LOGERR ("fd is not ok]fd=%d", fd);
- sbr_set_errno (EBADF);
- return NULL;
- }
-
- sbr_socket_t *sk = &g_res_group.sk[fd];
- if (!sk->sk_obj || !sk->stack_obj)
- {
- NSSBR_LOGERR
- ("data in sk is error, this can not happen]fd=%d,sk_obj=%p,stack_obj=%p",
- fd, sk->sk_obj, sk->stack_obj);
- sbr_set_errno (EBADF);
- return NULL;
- }
-
- return sk;
-}
-
-/*****************************************************************************
-* Prototype : sbr_free_sk
-* Description : free sock
-* Input : sbr_socket_t * sk
-* Output : None
-* Return Value : static inline void
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline void
-sbr_free_fd (int fd)
-{
- if ((fd < 1) || (fd > SBR_MAX_FD_NUM))
- {
- NSSBR_LOGERR ("fd is not ok]fd=%d", fd);
- sbr_set_errno (EBADF);
- return;
- }
-
- sbr_socket_t *sk = &g_res_group.sk[fd];
- if (!sk->fdopt && !sk->sk_obj && !sk->stack_obj)
- {
- NSSBR_LOGERR
- ("can't free empty fd] fd=%d, fdopt=%p, sk_obj=%p, stack_obj=%p", fd,
- sk->fdopt, sk->sk_obj, sk->stack_obj);
- return;
- }
- sbr_free_sk (sk);
-}
-
-int sbr_init_res ();
-
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/src/sbr/sbr_socket.c b/stacks/lwip_stack/src/sbr/sbr_socket.c
deleted file mode 100644
index 69481b5..0000000
--- a/stacks/lwip_stack/src/sbr/sbr_socket.c
+++ /dev/null
@@ -1,1274 +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 <dlfcn.h>
-#include "sbr_protocol_api.h"
-#include "sbr_res_mgr.h"
-#include "nstack_log.h"
-#include "nstack_dmm_api.h"
-
-#define SBR_INTERCEPT(ret, name, args) ret sbr_ ## name args
-#define CALL_SBR_INTERCEPT(name, args) sbr_ ## name args
-#define GET_SBR_INTERCEPT(name) sbr_ ## name
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : create socket
-* Input : int
-* socket
-* (int domain
-* int type
-* int protocol)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, socket, (int domain, int type, int protocol))
-{
- NSSBR_LOGDBG ("socket]domain=%d,type=%d,protocol=%d", domain, type,
- protocol);
- sbr_fdopt *fdopt = sbr_get_fdopt (domain, type, protocol);
-
- if (!fdopt)
- {
- return -1;
- }
-
- sbr_socket_t *sk = sbr_malloc_sk ();
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt = fdopt;
-
- int ret = sk->fdopt->socket (sk, domain, type, protocol);
-
- if (ret != 0)
- {
- sbr_free_sk (sk);
- return ret;
- }
-
- return sk->fd;
-}
-
-/*****************************************************************************
-* Prototype : sbr_check_addr
-* Description : check addr
-* Input : int s
-* struct sockaddr * addr
-* socklen_t * addrlen
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_check_addr (int s, struct sockaddr *addr, socklen_t * addrlen)
-{
- if (addr)
- {
- if (!addrlen)
- {
- NSSBR_LOGERR ("addrlen is null]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- if (0 > (int) (*addrlen))
- {
- NSSBR_LOGERR ("addrlen is negative]fd=%d,addrlen=%d", s, *addrlen);
- sbr_set_errno (EINVAL);
- return -1;
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : accept4
-* Input : int
-* accept4
-* (int s
-* struct sockaddr * addr
-* socklen_t * addrlen
-* int flags)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, accept4,
- (int s, struct sockaddr * addr, socklen_t * addrlen,
- int flags))
-{
- NSSBR_LOGDBG ("accept4]fd=%d,addr=%p,addrlen=%p,flags=%d", s, addr, addrlen,
- flags);
- int ret = sbr_check_addr (s, addr, addrlen);
-
- if (ret != 0)
- {
- return ret;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sbr_socket_t *new_sk = sbr_malloc_sk ();
- if (!new_sk)
- {
- return -1;
- }
-
- new_sk->fdopt = sk->fdopt;
-
- ret = sk->fdopt->accept4 (sk, new_sk, addr, addrlen, flags);
- if (-1 == ret)
- {
- sbr_free_sk (new_sk);
- }
-
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : accept
-* Input : int
-* accept
-* (int s
-* struct sockaddr * addr
-* socklen_t * addrlen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, accept,
- (int s, struct sockaddr * addr, socklen_t * addrlen))
-{
- NSSBR_LOGDBG ("accept]fd=%d,addr=%p,addrlen=%p", s, addr, addrlen);
- int ret = sbr_check_addr (s, addr, addrlen);
-
- if (ret != 0)
- {
- return ret;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sbr_socket_t *new_sk = sbr_malloc_sk ();
- if (!new_sk)
- {
- return -1;
- }
-
- new_sk->fdopt = sk->fdopt;
-
- ret = sk->fdopt->accept (sk, new_sk, addr, addrlen);
- if (-1 == ret)
- {
- sbr_free_sk (new_sk);
- }
-
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : bind
-* Input : int
-* bind
-* (int s
-* const struct sockaddr * name
-* socklen_t namelen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, bind,
- (int s, const struct sockaddr * name, socklen_t namelen))
-{
- NSSBR_LOGDBG ("bind]fd=%d,name=%p,namelen=%d", s, name, namelen);
- if (!name)
- {
- NSSBR_LOGERR ("name is not ok]fd=%d,name=%p", s, name);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- if ((name->sa_family) != AF_INET)
- {
- NSSBR_LOGERR ("domain is not AF_INET]fd=%d,name->sa_family=%u", s,
- name->sa_family);
- sbr_set_errno (EAFNOSUPPORT);
- return -1;
- }
-
- if (namelen != sizeof (struct sockaddr_in))
- {
- NSSBR_LOGERR ("namelen is invalid]fd=%d,namelen=%d", s, namelen);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->bind (sk, name, namelen);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : listen
-* Input : int
-* listen
-* (int s
-* int backlog)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, listen, (int s, int backlog))
-{
- NSSBR_LOGDBG ("listen]fd=%d,backlog=%d", s, backlog);
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- /* limit the "backlog" parameter to fit in an u8_t */
- if (backlog < 0)
- {
- backlog = 0;
- }
-
- if (backlog > 0xff)
- {
- backlog = 0xff;
- }
-
- return sk->fdopt->listen (sk, backlog);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : connect
-* Input : int
-* connect
-* (int s
-* const struct sockaddr * name
-* socklen_t namelen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, connect,
- (int s, const struct sockaddr * name, socklen_t namelen))
-{
- NSSBR_LOGDBG ("connect]fd=%d,name=%p,namelen=%d", s, name, namelen);
- if (!name)
- {
- NSSBR_LOGERR ("name is null]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- if (!
- (namelen == sizeof (struct sockaddr_in)
- && (name->sa_family == AF_INET)))
- {
- NSSBR_LOGERR ("parameter invalid]fd=%d,domain=%u,namelen=%d", s,
- name->sa_family, namelen);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- NSSBR_LOGERR ("get socket failed]fd=%d", s);
- return -1;
- }
-
- return sk->fdopt->connect (sk, name, namelen);
-}
-
-/*****************************************************************************
-* Prototype : sbr_check_sock_name
-* Description : check name
-* Input : int s
-* struct sockaddr * name
-* socklen_t * namelen
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_check_sock_name (int s, struct sockaddr *name, socklen_t * namelen)
-{
- if (!name || !namelen)
- {
- NSSBR_LOGERR ("name or namelen is null]fd=%d", s);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- if (*namelen & 0x80000000)
- {
- NSSBR_LOGERR ("namelen is not ok]fd=%d,namelen=%d", s, *namelen);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : getpeername
-* Input : int
-* getpeername
-* (int s
-* struct sockaddr * name
-* socklen_t * namelen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, getpeername,
- (int s, struct sockaddr * name, socklen_t * namelen))
-{
- NSSBR_LOGDBG ("getpeername]fd=%d", s);
- int ret = sbr_check_sock_name (s, name, namelen);
-
- if (ret != 0)
- {
- return ret;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- ret = sk->fdopt->getpeername (sk, name, namelen);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : getsockname
-* Input : int
-* getsockname
-* (int s
-* struct sockaddr * name
-* socklen_t * namelen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, getsockname,
- (int s, struct sockaddr * name, socklen_t * namelen))
-{
- NSSBR_LOGDBG ("getsockname]fd=%d", s);
- int ret = sbr_check_sock_name (s, name, namelen);
-
- if (ret != 0)
- {
- return ret;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- ret = sk->fdopt->getsockname (sk, name, namelen);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : setsockopt
-* Input : int
-* setsockopt
-* (int s
-* int level
-* int optname
-* const void * optval
-* socklen_t optlen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, setsockopt,
- (int s, int level, int optname, const void *optval,
- socklen_t optlen))
-{
- NSSBR_LOGDBG ("setsockopt]fd=%d,level=%d,optname=%d,optval=%p,optlen=%d", s,
- level, optname, optval, optlen);
- if (!optval)
- {
- NSSBR_LOGERR ("optval is null]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- int ret = sk->fdopt->setsockopt (sk, level, optname, optval, optlen);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : getsockopt
-* Input : int
-* getsockopt
-* (int s
-* int level
-* int optname
-* void * optval
-* socklen_t * optlen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, getsockopt,
- (int s, int level, int optname, void *optval,
- socklen_t * optlen))
-{
- NSSBR_LOGDBG ("getsockopt]fd=%d,level=%d,optname=%d,optval=%p,optlen=%p", s,
- level, optname, optval, optlen);
- if (!optval || !optlen)
- {
- NSSBR_LOGERR ("optval or optlen is NULL]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- int ret = sk->fdopt->getsockopt (sk, level, optname, optval, optlen);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : ioctl
-* Input : int
-* ioctl
-* (int s
-* unsigned long cmd
-* ...)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, ioctl, (int s, unsigned long cmd, ...))
-{
- NSSBR_LOGDBG ("ioctl]fd=%d,cmd=%lu", s, cmd);
- va_list va;
- va_start (va, cmd);
- void *arg = va_arg (va, void *);
- va_end (va);
-
- if (!arg)
- {
- NSSBR_LOGERR ("parameter is not ok]fd=%d", s);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- int ret = sk->fdopt->ioctl (sk, cmd, arg);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : fcntl
-* Input : int
-* fcntl
-* (int s
-* int cmd
-* ...)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, fcntl, (int s, int cmd, ...))
-{
- NSSBR_LOGDBG ("fcntl]fd=%d,cmd=%d", s, cmd);
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- va_list va;
- va_start (va, cmd);
- long arg = va_arg (va, long);
- va_end (va);
-
- sk->fdopt->lock_common (sk);
- int ret = sk->fdopt->fcntl (sk, cmd, arg);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : recvfrom
-* Input : int
-* recvfrom
-* (int s
-* void * mem
-* size_t len
-* int flags
-* struct sockaddr * from
-* socklen_t * fromlen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, recvfrom,
- (int s, void *mem, size_t len, int flags,
- struct sockaddr * from, socklen_t * fromlen))
-{
- NSSBR_LOGDBG ("recvfrom]fd=%d,mem=%p,len=%d,flags=%d,from=%p,fromlen=%p", s,
- mem, len, flags, from, fromlen);
-
- if (0 == len)
- {
- NSSBR_LOGDBG ("len is zero]fd=%d,len=%u", s, (u32) len);
- return 0; //return directly, don't change the last errno.
- }
-
- if (!mem)
- {
- NSSBR_LOGERR ("mem is NULL]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- if (fromlen && (*((int *) fromlen) < 0))
- {
- NSSBR_LOGERR ("fromlen is not ok]fd=%d,fromlen=%d", s, *fromlen);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->recvfrom (sk, mem, len, flags, from, fromlen);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : read
-* Input : int
-* read
-* (int s
-* void * mem
-* size_t len)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, read, (int s, void *mem, size_t len))
-{
- NSSBR_LOGDBG ("read]fd=%d,mem=%p,len=%d", s, mem, len);
- return CALL_SBR_INTERCEPT (recvfrom, (s, mem, len, 0, NULL, NULL));
-}
-
-/*****************************************************************************
-* Prototype : sbr_check_iov
-* Description : check iov
-* Input : int s
-* const struct iovec * iov
-* int iovcnt
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_check_iov (int s, const struct iovec *iov, int iovcnt)
-{
- if ((!iov) || (iovcnt <= 0))
- {
- NSSBR_LOGERR ("iov is NULL or iovcn <=0]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- int i;
- for (i = 0; i < iovcnt; ++i)
- {
- if (!iov[i].iov_base && (iov[i].iov_len != 0))
- {
- NSSBR_LOGERR ("iov is not ok]fd=%d,iov_base=%p,iov_len=%d", s,
- iov[i].iov_base, iov[i].iov_len);
- sbr_set_errno (EFAULT);
- return -1;
- }
- }
-
- return 0;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : readv
-* Input : int
-* readv
-* (int s
-* const struct iovec * iov
-* int iovcnt)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, readv, (int s, const struct iovec * iov, int iovcnt))
-{
- NSSBR_LOGDBG ("readv]fd=%d,iov=%p,iovcnt=%d", s, iov, iovcnt);
-
- if (sbr_check_iov (s, iov, iovcnt) != 0)
- {
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->readv (sk, iov, iovcnt);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : recv
-* Input : int
-* recv
-* (int s
-* void * mem
-* size_t len
-* int flags)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, recv, (int s, void *mem, size_t len, int flags))
-{
- NSSBR_LOGDBG ("recv]fd=%d,mem=%p,len=%d,flags=%d", s, mem, len, flags);
- return CALL_SBR_INTERCEPT (recvfrom, (s, mem, len, flags, NULL, NULL));
-}
-
-/*****************************************************************************
-* Prototype : sbr_check_msg
-* Description : check msg
-* Input : int s
-* const struct msghdr * msg
-* Output : None
-* Return Value : static inline int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-static inline int
-sbr_check_msg (int s, const struct msghdr *msg)
-{
- if (!msg)
- {
- NSSBR_LOGERR ("msg is NULL]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- if (msg->msg_name && ((int) msg->msg_namelen < 0))
- {
- NSSBR_LOGERR ("msg_namelen is not ok]fd=%d,msg_namelen=%d", s,
- msg->msg_namelen);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- return sbr_check_iov (s, msg->msg_iov, msg->msg_iovlen);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : recvmsg
-* Input : int
-* recvmsg
-* (int s
-* struct msghdr * msg
-* int flags)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, recvmsg, (int s, struct msghdr * msg, int flags))
-{
- NSSBR_LOGDBG ("recvmsg]fd=%d,msg=%p,flags=%d", s, msg, flags);
-
- if (sbr_check_msg (s, msg) != 0)
- {
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->recvmsg (sk, msg, flags);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : send
-* Input : int
-* send
-* (int s
-* const void * data
-* size_t size
-* int flags)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, send, (int s, const void *data, size_t size, int flags))
-{
- NSSBR_LOGDBG ("send]fd=%d,data=%p,size=%zu,flags=%d", s, data, size, flags);
- if (!data)
- {
- NSSBR_LOGERR ("data is NULL]fd=%d", s);
- sbr_set_errno (EFAULT);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->send (sk, data, size, flags);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : sendmsg
-* Input : int
-* sendmsg
-* (int s
-* const struct msghdr * msg
-* int flags)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, sendmsg, (int s, const struct msghdr * msg, int flags))
-{
- NSSBR_LOGDBG ("sendmsg]fd=%d,msg=%p,flags=%d", s, msg, flags);
-
- if (sbr_check_msg (s, msg) != 0)
- {
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->sendmsg (sk, msg, flags);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : sendto
-* Input : int
-* sendto
-* (int s
-* const void * data
-* size_t size
-* int flags
-* const struct sockaddr * to
-* socklen_t tolen)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, sendto,
- (int s, const void *data, size_t size, int flags,
- const struct sockaddr * to, socklen_t tolen))
-{
- NSSBR_LOGDBG ("sendto]fd=%d,data=%p,size=%zu,flags=%d,to=%p,tolen=%d", s,
- data, size, flags, to, tolen);
- if ((data == NULL) || (flags < 0))
- {
- NSSBR_LOGERR ("parameter is not ok]fd=%d,data=%p,size=%zu,flags=%d", s,
- data, size, flags);
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->sendto (sk, data, size, flags, to, tolen);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : write
-* Input : int
-* write
-* (int s
-* const void * data
-* size_t size)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, write, (int s, const void *data, size_t size))
-{
- NSSBR_LOGDBG ("write]fd=%d,data=%p,size=%zu", s, data, size);
- return CALL_SBR_INTERCEPT (send, (s, data, size, 0));
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : writev
-* Input : int
-* writev
-* (int s
-* const struct iovec * iov
-* int iovcnt)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, writev, (int s, const struct iovec * iov, int iovcnt))
-{
- NSSBR_LOGDBG ("writev]fd=%d,iov=%p,iovcnt=%d", s, iov, iovcnt);
-
- if (sbr_check_iov (s, iov, iovcnt) != 0)
- {
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->writev (sk, iov, iovcnt);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : shutdown
-* Input : int
-* shutdown
-* (int s
-* int how)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, shutdown, (int s, int how))
-{
- NSSBR_LOGDBG ("shutdown]fd=%d,how=%d", s, how);
- if ((how != SHUT_RD) && (how != SHUT_WR) && (how != SHUT_RDWR))
- {
- sbr_set_errno (EINVAL);
- return -1;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- sk->fdopt->lock_common (sk);
- int ret = sk->fdopt->shutdown (sk, how);
- sk->fdopt->unlock_common (sk);
- return ret;
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : close
-* Input : int
-* close
-* (int s)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (int, close, (int s))
-{
- NSSBR_LOGDBG ("close]fd=%d", s);
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- int ret = sk->fdopt->close (sk);
- sbr_free_sk (sk);
- return ret;
-}
-
-SBR_INTERCEPT (int, select,
- (int nfds, fd_set * readfd, fd_set * writefd,
- fd_set * exceptfd, struct timeval * timeout))
-{
- return lwip_try_select (nfds, readfd, writefd, exceptfd, timeout);
-}
-
-SBR_INTERCEPT (unsigned int, ep_getevt,
- (int epfd, int profd, unsigned int events))
-{
- NSSBR_LOGDBG ("epfd= %d, proFD=%d,epi=0x%x", epfd, profd, events);
- sbr_socket_t *sk = sbr_lookup_sk (profd);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->ep_getevt (sk, events);
-}
-
-SBR_INTERCEPT (unsigned int, ep_ctl,
- (int epfd, int profd, int triggle_ops,
- struct epoll_event * event, void *pdata))
-{
- NSSBR_LOGDBG ("epfd = %d, proFD=%d,triggle_ops=%d,pdata=%p", epfd, profd,
- triggle_ops, pdata);
- sbr_socket_t *sk = sbr_lookup_sk (profd);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->ep_ctl (sk, triggle_ops, event, pdata);
-}
-
-SBR_INTERCEPT (int, peak, (int s))
-{
- NSSBR_LOGDBG ("]fd=%d", s);
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return -1;
- }
-
- return sk->fdopt->peak (sk);
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : set_app_info
-* Input : int
-* set_app_info
-* (int s
-* void* app_info)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (void, set_app_info, (int s, void *app_info))
-{
- NSSBR_LOGDBG ("set_app_info]fd=%d", s);
-
- if (!app_info)
- {
- NSSBR_LOGERR ("invalid param, app_info is NULL]");
- return;
- }
-
- sbr_socket_t *sk = sbr_lookup_sk (s);
- if (!sk)
- {
- return;
- }
-
- sk->fdopt->set_app_info (sk, app_info);
-}
-
-/* app send its version info to nStackMain */
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : sbr_app_touch
-* Input : int
-* sbr_app_touch
-* ()
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (void, app_touch, (void))
-{
- NSSBR_LOGDBG ("sbr_app_touch() is called]");
-
- sbr_app_touch_in ();
-}
-
-/*****************************************************************************
-* Prototype : SBR_INTERCEPT
-* Description : set_close_status
-* Input : void
-* set_close_stat
-* (int s
-* int flag)
-* Output : None
-* Return Value :
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-SBR_INTERCEPT (void, set_close_stat, (int s, int flag))
-{
- NSSBR_LOGDBG ("]fd=%d", s);
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return;
- }
- if (sk->fdopt->set_close_stat)
- {
- sk->fdopt->set_close_stat (sk, flag);
- }
-
-}
-
-SBR_INTERCEPT (int, fd_alloc, ())
-{
- return sbr_socket (AF_INET, SOCK_STREAM, 0);
-}
-
-SBR_INTERCEPT (int, fork_init_child, (pid_t p, pid_t c))
-{
- NSSBR_LOGDBG ("fork_init_child() is called]");
- return sbr_fork_protocol ();
-}
-
-SBR_INTERCEPT (void, fork_parent_fd, (int s, pid_t p))
-{
- NSSBR_LOGDBG ("fork_parent_fd() is called]");
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return;
- }
-
- sk->fdopt->fork_parent (sk, p);
-}
-
-SBR_INTERCEPT (void, fork_child_fd, (int s, pid_t p, pid_t c))
-{
- NSSBR_LOGDBG ("fork_child_fd() is called]");
- sbr_socket_t *sk = sbr_lookup_sk (s);
-
- if (!sk)
- {
- return;
- }
-
- sk->fdopt->fork_child (sk, p, c);
-
-}
-
-SBR_INTERCEPT (void, fork_free_fd, (int s, pid_t p, pid_t c))
-{
- NSSBR_LOGDBG ("fork_free_fd() is called]");
- sbr_free_fd (s);
-}
-
-/*****************************************************************************
-* Prototype : nstack_stack_register
-* Description : reg api to nsocket
-* Input : nstack_socket_ops* ops
-* nstack_event_ops *val
-* nstack_proc_ops *deal
-* Output : None
-* Return Value : int
-* Calls :
-* Called By :
-*
-*****************************************************************************/
-int
-lwip_stack_register (nstack_proc_cb * ops, nstack_event_cb * val)
-{
- if (!ops || !val || !val->handle)
- {
- return -1;
- }
-
-#undef NSTACK_MK_DECL
-#define NSTACK_MK_DECL(ret, fn, args) \
- (ops->socket_ops).pf ## fn = (typeof(((nstack_socket_ops*)0)->pf ## fn))dlsym(val->handle, "sbr_" # fn);
-#include "declare_syscalls.h"
-
- (ops->extern_ops).module_init = sbr_init_res;
- (ops->extern_ops).ep_getevt = GET_SBR_INTERCEPT (ep_getevt);
- (ops->extern_ops).ep_ctl = GET_SBR_INTERCEPT (ep_ctl);
- (ops->extern_ops).peak = GET_SBR_INTERCEPT (peak);
- (ops->extern_ops).stack_alloc_fd = GET_SBR_INTERCEPT (fd_alloc); /*alloc a fd id for epoll */
- (ops->extern_ops).fork_init_child = GET_SBR_INTERCEPT (fork_init_child);
- (ops->extern_ops).fork_parent_fd = GET_SBR_INTERCEPT (fork_parent_fd);
- (ops->extern_ops).fork_child_fd = GET_SBR_INTERCEPT (fork_child_fd);
- (ops->extern_ops).fork_free_fd = GET_SBR_INTERCEPT (fork_free_fd);
- return 0;
-}
diff --git a/stacks/lwip_stack/src/tools/CMakeLists.txt b/stacks/lwip_stack/src/tools/CMakeLists.txt
deleted file mode 100644
index bd485b8..0000000
--- a/stacks/lwip_stack/src/tools/CMakeLists.txt
+++ /dev/null
@@ -1,22 +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.
-#########################################################################
-
-FILE(GLOB_RECURSE Tcpdump *.c)
-ADD_LIBRARY(nTcpdump STATIC ${Tcpdump})
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_LIST_DIR}/../include
-)
-TARGET_LINK_LIBRARIES(nTcpdump dmm_api) \ No newline at end of file
diff --git a/stacks/lwip_stack/src/tools/dump_tool.c b/stacks/lwip_stack/src/tools/dump_tool.c
deleted file mode 100644
index 53f0e44..0000000
--- a/stacks/lwip_stack/src/tools/dump_tool.c
+++ /dev/null
@@ -1,622 +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 <arpa/inet.h>
-
-#include "nsfw_init.h"
-#include "nsfw_maintain_api.h"
-#include "nsfw_mem_api.h"
-#include "nsfw_fd_timer_api.h"
-#include "nstack_log.h"
-#include "nstack_securec.h"
-
-#include "dump_tool.h"
-#include "nstack_dmm_adpt.h"
-
-NSTACK_STATIC u32 g_dump_task_mask = 0;
-NSTACK_STATIC dump_task_info g_dump_task[MAX_DUMP_TASK];
-static dump_timer_info g_dump_timer;
-
-static nsfw_mem_name g_dump_mem_ring_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, DUMP_SHMEM_RIGN_NAME };
-static nsfw_mem_name g_dump_mem_pool_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, DUMP_SHMEM_POOL_NAME };
-
-NSTACK_STATIC inline void
-dump_task_init (dump_task_info * task)
-{
- task->task_state = 0;
- task->task_id = -1;
- task->task_keep_time = 0;
- task->task_pool = NULL;
- task->task_queue = NULL;
-}
-
-NSTACK_STATIC inline void
-clear_dump_task ()
-{
- int i = 0;
- for (; i < MAX_DUMP_TASK; i++)
- {
- dump_task_init (&g_dump_task[i]);
- }
-}
-
-NSTACK_STATIC i16
-get_dump_task (nsfw_tool_dump_msg * req)
-{
- // base version just support 1 dump task
- if (req->task_keep_time > MAX_DUMP_TIME
- || req->task_keep_time < MIN_DUMP_TIME)
- {
- NSPOL_DUMP_LOGERR ("task keep time invalid] time=%u.",
- req->task_keep_time);
- return -1;
- }
-
- if (1 == g_dump_task[0].task_state)
- {
- NSPOL_DUMP_LOGERR
- ("start tcpdump task failed, task still in work state] task id=%d.",
- 0);
- return -1;
- }
-
- struct timespec cur_time;
- GET_CUR_TIME (&cur_time); /*do not need return value */
- g_dump_task[0].task_start_sec = cur_time.tv_sec;
- g_dump_task[0].last_hbt_sec = cur_time.tv_sec;
-
- g_dump_task[0].task_state = 1;
- g_dump_task[0].task_id = 0;
- g_dump_task[0].task_keep_time = req->task_keep_time;
-
- g_dump_task_mask |= (1 << g_dump_task[0].task_id);
- NSPOL_DUMP_LOGINF ("start tcpdump task success] task id=%d.", 0);
- return 0;
-}
-
-NSTACK_STATIC i16
-close_dump_task (i16 task_id)
-{
- if (task_id < 0 || task_id >= MAX_DUMP_TASK)
- {
- NSPOL_DUMP_LOGERR
- ("receive invalid task id in close dump task req] task id=%d.",
- task_id);
- return -1;
- }
-
- g_dump_task[task_id].task_state = 0;
-
- g_dump_task_mask &= ~(1 << task_id);
-
- NSPOL_DUMP_LOGINF ("stop tcpdump task success] task id=%d.", 0);
-
- return task_id;
-}
-
-NSTACK_STATIC void
-stop_expired_task (int idx, u32 now_sec)
-{
- dump_task_info *ptask = &g_dump_task[idx];
- if (0 == ptask->task_state)
- {
- return;
- }
-
- if (now_sec - ptask->task_start_sec > ptask->task_keep_time)
- {
- NSPOL_DUMP_LOGERR
- ("stop dump task because task time expired] task id=%d, now_sec=%u, task start time=%u, dump time=%u.",
- ptask->task_id, now_sec, ptask->task_start_sec,
- ptask->task_keep_time);
- close_dump_task (ptask->task_id);
- return;
- }
-
- if (now_sec - ptask->last_hbt_sec > DUMP_TASK_HBT_TIME_OUT)
- {
- NSPOL_DUMP_LOGERR
- ("stop dump task because heart beat time out] task id=%d, now_sec=%u, last hbt time=%u, hbt timeout=%u.",
- ptask->task_id, now_sec, ptask->last_hbt_sec,
- DUMP_TASK_HBT_TIME_OUT);
- close_dump_task (ptask->task_id);
- }
-
- return;
-}
-
-NSTACK_STATIC inline bool
-check_dump_alive (u32 timer_type, void *data)
-{
- dump_timer_info *ptimer_info = (dump_timer_info *) data;
-
- struct timespec cur_time;
- GET_CUR_TIME (&cur_time); /*do not need return value */
-
- int i = 0;
- for (; i < MAX_DUMP_TASK; i++)
- {
- stop_expired_task (i, cur_time.tv_sec);
- }
-
- ptimer_info->ptimer =
- nsfw_timer_reg_timer (1, ptimer_info, check_dump_alive,
- *(struct timespec *) (ptimer_info->interval));
-
- return true;
-}
-
-NSTACK_STATIC bool
-dump_init_timer (dump_timer_info * ptimer_info)
-{
- struct timespec *trigger_time =
- (struct timespec *) malloc (sizeof (struct timespec));
- if (NULL == trigger_time)
- {
- NSPOL_DUMP_LOGERR ("alloc memory for timer failed.");
- return false;
- }
-
- trigger_time->tv_sec = DUMP_HBT_CHK_INTERVAL;
- trigger_time->tv_nsec = 0;
-
- ptimer_info->interval = trigger_time;
- ptimer_info->ptimer =
- nsfw_timer_reg_timer (1, ptimer_info, check_dump_alive, *trigger_time);
- return true;
-}
-
-NSTACK_STATIC inline u32
-copy_limit_buf (char *dst_buf, int dst_buf_len, char *src_buf,
- u32 src_buf_len, u32 limit_len)
-{
- if (src_buf_len < limit_len)
- {
- NSPOL_DUMP_LOGERR ("message too short] len=%d", src_buf_len);
- return 0;
- }
-
- if (EOK != MEMCPY_S (dst_buf, dst_buf_len, src_buf, limit_len))
- {
- NSPOL_DUMP_LOGERR ("MEMCPY_S failed");
- return 0;
- }
-
- return limit_len;
-}
-
-NSTACK_STATIC inline u32
-get_packet_buf (char *dst_buf, int dst_buf_len, char *src_buf,
- u32 src_buf_len, u32 eth_head_len)
-{
-#define TCP_BUF_LEN (eth_head_len + IP_HEAD_LEN + TCP_HEAD_LEN)
-#define UDP_BUF_LEN (eth_head_len + IP_HEAD_LEN + UDP_HEAD_LEN)
-#define ICMP_BUF_LEN (eth_head_len + IP_HEAD_LEN + ICMP_HEAD_LEN)
-
- if (NULL == dst_buf || NULL == src_buf)
- {
- return 0;
- }
-
- struct ip_hdr *ip_head = (struct ip_hdr *) (src_buf + eth_head_len);
- if (ip_head->_proto == IP_PROTO_TCP)
- {
- return copy_limit_buf (dst_buf, dst_buf_len, src_buf, src_buf_len,
- TCP_BUF_LEN);
- }
-
- if (ip_head->_proto == IP_PROTO_UDP)
- {
- return copy_limit_buf (dst_buf, dst_buf_len, src_buf, src_buf_len,
- UDP_BUF_LEN);
- }
-
- if (ip_head->_proto == IP_PROTO_ICMP)
- {
- return copy_limit_buf (dst_buf, dst_buf_len, src_buf, src_buf_len,
- ICMP_BUF_LEN);
- }
-
- if (EOK != MEMCPY_S (dst_buf, dst_buf_len, src_buf, src_buf_len))
- {
- NSPOL_DUMP_LOGERR ("MEMCPY_S failed");
- return 0;
- }
-
- return src_buf_len;
-}
-
-NSTACK_STATIC int
-pack_msg_inout (void *dump_buf, char *msg_buf, u32 len, u16 direction,
- void *para)
-{
- (void) para;
- dump_msg_info *pmsg = (dump_msg_info *) dump_buf;
- if (!pmsg)
- {
- return 0;
- }
-
- pmsg->direction = direction;
- struct timeval cur_time;
- gettimeofday (&cur_time, NULL);
- pmsg->dump_sec = cur_time.tv_sec;
- pmsg->dump_usec = cur_time.tv_usec;
-
- /* msg content can not be captured */
- u32 real_len =
- get_packet_buf (pmsg->buf, DUMP_MSG_SIZE, msg_buf, len, ETH_HEAD_LEN);
- if (0 == real_len)
- {
- return 0;
- }
-
- pmsg->len = real_len;
-
- return 1;
-}
-
-NSTACK_STATIC int
-pack_msg_loop (void *dump_buf, char *msg_buf, u32 len, u16 direction,
- void *para)
-{
- dump_msg_info *pmsg = (dump_msg_info *) dump_buf;
- if (!pmsg)
- {
- return 0;
- }
- pmsg->direction = direction;
- struct timeval cur_time;
- gettimeofday (&cur_time, NULL);
- pmsg->dump_sec = cur_time.tv_sec;
- pmsg->dump_usec = cur_time.tv_usec;
-
- eth_head pack_eth_head;
- int retVal =
- MEMCPY_S (pack_eth_head.dest_mac, MAC_ADDR_LEN, para, MAC_ADDR_LEN);
- if (EOK != retVal)
- {
- NSPOL_DUMP_LOGERR ("MEMCPY_S failed]retVal=%d", retVal);
- return 0;
- }
- retVal = MEMCPY_S (pack_eth_head.src_mac, MAC_ADDR_LEN, para, MAC_ADDR_LEN);
- if (EOK != retVal)
- {
- NSPOL_DUMP_LOGERR ("MEMCPY_S failed]retVal=%d", retVal);
- return 0;
- }
- pack_eth_head.eth_type = htons (PROTOCOL_IP);
-
- retVal =
- MEMCPY_S (pmsg->buf, DUMP_MSG_SIZE, &pack_eth_head, sizeof (eth_head));
- if (EOK != retVal)
- {
- NSPOL_DUMP_LOGERR ("MEMCPY_S failed]retVal=%d", retVal);
- return 0;
- }
-
- u32 buf_len = DUMP_MSG_SIZE - ETH_HEAD_LEN;
-
- /* msg content can not be captured- Begin */
- u32 real_len =
- get_packet_buf (pmsg->buf + ETH_HEAD_LEN, buf_len, msg_buf, len, 0);
- if (0 == real_len)
- {
- return 0;
- }
-
- pmsg->len = real_len + ETH_HEAD_LEN;
-
- return 1;
-}
-
-NSTACK_STATIC void
-dump_enqueue (int task_idx, void *buf, u32 len, u16 direction,
- pack_msg_fun pack_msg, void *para)
-{
- mring_handle queue = (mring_handle *) g_dump_task[task_idx].task_queue;
- mring_handle pool = (mring_handle *) g_dump_task[task_idx].task_pool;
-
- void *msg = NULL;
-
- if (nsfw_mem_ring_dequeue (pool, &msg) <= 0)
- {
- // such log may be too much if queue is empty
- NSPOL_DUMP_LOGDBG ("get msg node from mem pool failed] pool=%p.", pool);
- return;
- }
-
- if (NULL == msg)
- {
- NSPOL_DUMP_LOGWAR ("get NULL msg node from mem pool] pool=%p.", pool);
- return;
- }
-
- if (!pack_msg (msg, buf, len, direction, para))
- {
- NSPOL_DUMP_LOGWAR ("get dump msg failed");
- return;
- }
-
- if (nsfw_mem_ring_enqueue (queue, msg) < 0)
- {
- NSPOL_DUMP_LOGWAR ("dump mem ring enqueue failed] ring=%p.", queue);
- }
-
- return;
-}
-
-NSTACK_STATIC inline bool
-dump_enabled ()
-{
- return (0 != g_dump_task_mask);
-}
-
-void
-ntcpdump (void *buf, u32 buf_len, u16 direction)
-{
- u32 i;
- if (!dump_enabled ())
- {
- return;
- }
-
- /* fix Dead-code type Codedex issue here */
- for (i = 0; i < MAX_DUMP_TASK; i++)
- {
- if (g_dump_task[i].task_state)
- {
- dump_enqueue (i, buf, buf_len, direction, pack_msg_inout, NULL);
- }
- }
-}
-
-void
-ntcpdump_loop (void *buf, u32 buf_len, u16 direction, void *eth_addr)
-{
- u32 i;
-
- if (!dump_enabled ())
- {
- return;
- }
-
- /* fix Dead-code type Codedex issue here */
- for (i = 0; i < MAX_DUMP_TASK; i++)
- {
- if (g_dump_task[i].task_state)
- {
- dump_enqueue (i, buf, buf_len, direction, pack_msg_loop, eth_addr);
- }
- }
-}
-
-// called by nStackMain
-bool
-dump_create_pool ()
-{
- nsfw_mem_sppool pool_info;
- if (EOK !=
- MEMCPY_S (&pool_info.stname, sizeof (nsfw_mem_name),
- &g_dump_mem_pool_info, sizeof (nsfw_mem_name)))
- {
- NSPOL_DUMP_LOGERR ("create dump mem pool failed, MEMCPY_S failed.");
- return false;
- }
-
- pool_info.usnum = DUMP_MSG_NUM;
- pool_info.useltsize = DUMP_MSG_SIZE + sizeof (dump_msg_info);
- pool_info.isocket_id = NSFW_SOCKET_ANY;
- pool_info.enmptype = NSFW_MRING_MPSC;
-
- mring_handle pool = nsfw_mem_sp_create (&pool_info);
- if (NULL == pool)
- {
- NSPOL_DUMP_LOGERR ("create dump mem pool failed, pool create failed.");
- return false;
- }
-
- g_dump_task[0].task_pool = pool;
-
- NSPOL_DUMP_LOGINF ("dump pool create success] pool=%p.", pool);
-
- return true;
-}
-
-bool
-dump_create_ring ()
-{
- nsfw_mem_mring ring_info;
- if (EOK !=
- MEMCPY_S (&ring_info.stname, sizeof (nsfw_mem_name),
- &g_dump_mem_ring_info, sizeof (nsfw_mem_name)))
- {
- NSPOL_DUMP_LOGERR ("create dump mem ring failed, MEMCPY_S failed.");
- return false;
- }
-
- ring_info.usnum = DUMP_MSG_NUM;
- ring_info.isocket_id = NSFW_SOCKET_ANY;
- ring_info.enmptype = NSFW_MRING_MPSC;
-
- mring_handle ring = nsfw_mem_ring_create (&ring_info);
- if (NULL == ring)
- {
- NSPOL_DUMP_LOGERR ("create dump mem ring failed, ring create failed.");
- return false;
- }
-
- g_dump_task[0].task_queue = ring;
-
- NSPOL_DUMP_LOGINF ("dump ring create success] ring=%p.", ring);
-
- return true;
-}
-
-NSTACK_STATIC int
-on_dump_tool_req (nsfw_mgr_msg * req)
-{
- i16 task_id = 0;
- if (!req)
- {
- return -1;
- }
- if (req->src_proc_type != NSFW_PROC_TOOLS)
- {
- NSPOL_DUMP_LOGDBG
- ("dump module receive invaild message] module type=%u.",
- req->src_proc_type);
- return -1;
- }
-
- if (req->msg_type != MGR_MSG_TOOL_TCPDUMP_REQ)
- {
- NSPOL_DUMP_LOGDBG ("dump module receive invaild message] msg type=%u.",
- req->msg_type);
- return -1;
- }
-
- nsfw_tool_dump_msg *dump_msg_req = GET_USER_MSG (nsfw_tool_dump_msg, req);
-
- switch (dump_msg_req->op_type)
- {
- case START_DUMP_REQ:
- task_id = get_dump_task (dump_msg_req);
- break;
-
- case STOP_DUMP_REQ:
- task_id = close_dump_task (dump_msg_req->task_id);
- break;
-
- default:
- task_id = -1;
- }
-
- nsfw_mgr_msg *rsp = nsfw_mgr_rsp_msg_alloc (req);
- if (NULL == rsp)
- {
- NSPOL_DUMP_LOGDBG ("alloc response for dump request failed.");
- return -1;
- }
-
- nsfw_tool_dump_msg *dump_msg_rsp = GET_USER_MSG (nsfw_tool_dump_msg, rsp);
- dump_msg_rsp->op_type = dump_msg_req->op_type + DUMP_MSG_TYPE_RSP;
- dump_msg_rsp->task_id = task_id;
-
- nsfw_mgr_send_msg (rsp);
- nsfw_mgr_msg_free (rsp);
- return 0;
-
-}
-
-NSTACK_STATIC int
-on_dump_hbt_req (nsfw_mgr_msg * req)
-{
- if (!req)
- {
- return -1;
- }
- if (req->src_proc_type != NSFW_PROC_TOOLS)
- {
- NSPOL_DUMP_LOGDBG
- ("dump module receive invaild message] module type=%u.",
- req->src_proc_type);
- return -1;
- }
-
- if (req->msg_type != MGR_MSG_TOOL_HEART_BEAT)
- {
- NSPOL_DUMP_LOGDBG ("dump module receive invaild message] msg type=%u.",
- req->msg_type);
- return -1;
- }
-
- nsfw_tool_hbt *dump_hbt_req = GET_USER_MSG (nsfw_tool_hbt, req);
-
- i16 task_id = dump_hbt_req->task_id;
- if (task_id < 0 || task_id >= MAX_DUMP_TASK)
- {
- NSPOL_DUMP_LOGERR ("dump heart beat with invalid task id] task id=%d.",
- task_id);
- return -1;
- }
-
- if (0 == g_dump_task[task_id].task_state)
- {
- NSPOL_DUMP_LOGDBG
- ("dump module receive heart beat but task not enabled] task id=%d.",
- task_id);
- return 0;
- }
-
- struct timespec cur_time;
- GET_CUR_TIME (&cur_time); /*no need return value */
-
- // update task alive time
- g_dump_task[task_id].last_hbt_seq = dump_hbt_req->seq;
- g_dump_task[task_id].last_hbt_sec = cur_time.tv_sec;
-
- return 0;
-}
-
-NSTACK_STATIC int dump_tool_init (void *param);
-NSTACK_STATIC int
-dump_tool_init (void *param)
-{
- u32 proc_type = (u32) ((long long) param);
- NSPOL_DUMP_LOGINF ("dump module init] proc type=%d", proc_type);
-
- switch (proc_type)
- {
- case NSFW_PROC_MAIN:
- nsfw_mgr_reg_msg_fun (MGR_MSG_TOOL_TCPDUMP_REQ, on_dump_tool_req);
- nsfw_mgr_reg_msg_fun (MGR_MSG_TOOL_HEART_BEAT, on_dump_hbt_req);
- break;
- default:
- NSPOL_DUMP_LOGERR ("dump init with unknow module] proc type=%d",
- proc_type);
- return -1;
- }
-
- clear_dump_task ();
-
- if (!dump_create_ring ())
- {
- return -1;
- }
-
- if (!dump_create_pool ())
- {
- return -1;
- }
-
- if (!dump_init_timer (&g_dump_timer))
- {
- return -1;
- }
-
- NSPOL_DUMP_LOGINF ("dump module init success.");
- return 0;
-}
-
-/* *INDENT-OFF* */
-NSFW_MODULE_NAME (TCPDUMP_MODULE)
-NSFW_MODULE_PRIORITY (10)
-NSFW_MODULE_DEPENDS (NSTACK_DMM_MODULE)
-NSFW_MODULE_INIT (dump_tool_init)
-/* *INDENT-ON* */
diff --git a/stacks/lwip_stack/src/tools/dump_tool.h b/stacks/lwip_stack/src/tools/dump_tool.h
deleted file mode 100644
index 8c32523..0000000
--- a/stacks/lwip_stack/src/tools/dump_tool.h
+++ /dev/null
@@ -1,81 +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.
-*/
-
-#ifndef _DUMP_TOOL_H_
-#define _DUMP_TOOL_H_
-
-#define IP_PROTO_ICMP 1
-#define IP_PROTO_IGMP 2
-#define IP_PROTO_UDP 17
-#define IP_PROTO_UDPLITE 136
-#define IP_PROTO_TCP 6
-
-#ifndef MAC_ADDR_LEN
-#define MAC_ADDR_LEN 6
-#endif
-
-#ifndef IP_HEAD_LEN
-#define IP_HEAD_LEN 20
-#endif
-#ifndef TCP_HEAD_LEN
-#define TCP_HEAD_LEN 20
-#endif
-#ifndef UDP_HEAD_LEN
-#define UDP_HEAD_LEN 8
-#endif
-
-#ifndef ICMP_HEAD_LEN
-#define ICMP_HEAD_LEN 8
-#endif
-
-typedef struct _dump_task_info
-{
- u16 task_state; // 0:off, 1:on
- i16 task_id;
- u32 task_keep_time;
- u32 task_start_sec;
- u32 last_hbt_seq;
- u32 last_hbt_sec;
- void *task_queue;
- void *task_pool;
-} dump_task_info;
-
-typedef struct _dump_eth_head
-{
- u8 dest_mac[MAC_ADDR_LEN];
- u8 src_mac[MAC_ADDR_LEN];
- u16 eth_type;
-} eth_head;
-
-#define ETH_HEAD_LEN sizeof(eth_head)
-
-struct ip_hdr
-{
- u16 _v_hl_tos;
- u16 _len;
- u16 _id;
- u16 _offset;
- u8 _ttl;
- u8 _proto;
- u16 _chksum;
- u32 src;
- u32 dest;
-};
-
-typedef int (*pack_msg_fun) (void *dump_buf, char *msg_buf, u32 len,
- u16 direction, void *para);
-
-#endif
diff --git a/stacks/lwip_stack/tools/CMakeLists.txt b/stacks/lwip_stack/tools/CMakeLists.txt
deleted file mode 100644
index cfb5615..0000000
--- a/stacks/lwip_stack/tools/CMakeLists.txt
+++ /dev/null
@@ -1,91 +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.
-#########################################################################
-
-if(WITH_HAL_LIB)
-else()
-endif()
-SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${NSTACKTOOLS_PATH})
-LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC})
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/platform/SecureC/include/)
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIC -fPIE -pie -m64 -mssse3 -std=gnu89")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wshadow -Wfloat-equal -Wformat=2")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags,--rpath,.")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium")
-
-INCLUDE_DIRECTORIES(
- ../src/include/
- ../../../thirdparty/glog/glog-0.3.4/src/
- ../../SecureC/include/
-)
-
-#ADD_EXECUTABLE(narp narp.c)
-#ADD_EXECUTABLE(nnetstat nnetstat.c)
-
-ADD_EXECUTABLE(ntcpdump ntcpdump.c)
-if(WITH_SECUREC_LIB)
-TARGET_LINK_LIBRARIES(
- ntcpdump
- pthread
- rt
- securec
- -Wl,--whole-archive
- libjson-c.a
- libglog.a
- dmm_api
- -Wl,--no-whole-archive,-lstdc++ -ldl
- rte_eal
- rte_mempool
- rte_mbuf
- rte_ring
-)
-else()
-TARGET_LINK_LIBRARIES(
- ntcpdump
- pthread
- rt
- -Wl,--whole-archive
- libjson-c.a
- libglog.a
- dmm_api
- -Wl,--no-whole-archive,-lstdc++ -ldl
- rte_eal
- rte_mempool
- rte_mbuf
- rte_ring
-)
-endif()
-
-if(WITH_SECUREC_LIB)
-ADD_DEPENDENCIES(ntcpdump JSON GLOG SECUREC DPDK)
-else()
-ADD_DEPENDENCIES(ntcpdump JSON GLOG DPDK)
-endif()
-
-
-ADD_EXECUTABLE(nping nping.c)
-
-if(WITH_SECUREC_LIB)
-ADD_DEPENDENCIES(nping SECUREC DPDK)
-else()
-ADD_DEPENDENCIES(nping DPDK)
-endif()
-
-if(WITH_SECUREC_LIB)
-TARGET_LINK_LIBRARIES(nping libnStackAPI.so securec -Wl,-rpath=. -lpthread -lrt -ldl)
-else()
-TARGET_LINK_LIBRARIES(nping libnStackAPI.so -Wl,-rpath=. -lpthread -lrt -ldl)
-endif()
diff --git a/stacks/lwip_stack/tools/nping.c b/stacks/lwip_stack/tools/nping.c
deleted file mode 100644
index 09e604f..0000000
--- a/stacks/lwip_stack/tools/nping.c
+++ /dev/null
@@ -1,627 +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 <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#include <errno.h>
-#include <time.h>
-#include <fcntl.h>
-#include <memory.h>
-#include <strings.h>
-#include <limits.h>
-#include <getopt.h>
-#include "nstack_securec.h"
-#include "tool_common.h"
-
-/*======== for global variables =======*/
-
-NSTACK_STATIC input_info g_input_info = { 0 };
-static stat_info g_stat_info = { 0 };
-
-static char *g_nping_short_options = "c:r:I:";
-
-int g_exit = 0;
-void
-user_exit (int sig)
-{
- g_exit = 1;
-}
-
-NSTACK_STATIC inline double
-get_cost_time (struct timespec *pstart, struct timespec *pend)
-{
- double sec = (double) (pend->tv_sec - pstart->tv_sec);
- double nsec = (double) (pend->tv_nsec - pstart->tv_nsec);
-
- return (sec * 1000 + (nsec / 1000000));
-}
-
-NSTACK_STATIC inline double
-get_lost_rate (unsigned int lost_count, unsigned int send_count)
-{
- if (0 == send_count)
- {
- return 0;
- }
-
- return ((double) lost_count / send_count);
-}
-
-void
-print_stat (stat_info * info, const char *remote_ip)
-{
- unsigned int send_count = info->send_seq;
- unsigned int recv_count = info->recv_ok;
- unsigned int lost_count = send_count - recv_count;
- double lost_rate = 100 * get_lost_rate (lost_count, send_count);
- double cost_time = get_cost_time (&info->start_time, &info->end_time);
-
- printf ("\n------ %s ping statistics ------\n", remote_ip);
-
- printf
- ("%u packets transmitted, %u received, %.2f%% packet loss, time %.2fms\n",
- send_count, recv_count, lost_rate, cost_time);
-
- if (0 != recv_count)
- {
- double min_interval = info->min_interval;
- double max_interval = info->max_interval;
- double avg_interval = info->all_interval / recv_count;
- printf ("rtt min/avg/max = %.3f/%.3f/%.3f ms\n", min_interval,
- avg_interval, max_interval);
- }
-}
-
-NSTACK_STATIC inline u16
-get_chksum (icmp_head * pmsg)
-{
- int len = sizeof (icmp_head);
- u32 sum = 0;
- u16 *msg_stream = (u16 *) pmsg;
- u16 check_sum = 0;
-
- while (len > 1)
- {
- sum += *msg_stream;
- len -= 2;
- msg_stream++;
- }
-
- sum = (sum >> 16) + (sum & 0xFFFF);
- sum += (sum >> 16);
- check_sum = ~sum;
-
- return check_sum;
-}
-
-#ifndef MAX_SHORT
-#define MAX_SHORT 0xFFFF
-#endif
-
-NSTACK_STATIC inline void
-code_icmp_req (icmp_head * pmsg, u32 send_seq, pid_t my_pid)
-{
- struct timespec cur_time;
-
- pmsg->icmp_type = ICMP_ECHO;
- pmsg->icmp_code = 0;
- pmsg->icmp_cksum = 0;
- pmsg->icmp_seq = send_seq % (MAX_SHORT + 1);
- pmsg->icmp_id = my_pid;
- pmsg->timestamp = 0;
-
- if (0 != clock_gettime (CLOCK_MONOTONIC, &cur_time))
- {
- printf ("Failed to get time, errno = %d\n", errno);
- }
-
- pmsg->icmp_sec = cur_time.tv_sec;
- pmsg->icmp_nsec = cur_time.tv_nsec;
-
- pmsg->icmp_cksum = get_chksum (pmsg);
- return;
-}
-
-NSTACK_STATIC int
-send_icmp_req (int socket, pid_t my_pid, stat_info * stat,
- struct sockaddr_in *remote_addr)
-{
- int send_ret;
- icmp_head icmp_req;
-
- stat->send_seq++;
- code_icmp_req (&icmp_req, stat->send_seq, my_pid);
-
- send_ret = sendto (socket, &icmp_req, sizeof (icmp_head), 0,
- (struct sockaddr *) remote_addr,
- sizeof (struct sockaddr_in));
-
- if (send_ret < 0)
- {
- printf ("send icmp request failed.\n");
- return -1;
- }
-
- return send_ret;
-}
-
-NSTACK_STATIC inline double
-cal_interval (struct timespec *psend, struct timespec *precv,
- stat_info * stat)
-{
- double interval = get_cost_time (psend, precv);
-
- stat->all_interval += interval;
-
- if (interval < stat->min_interval)
- {
- stat->min_interval = interval;
- }
-
- if (interval > stat->max_interval)
- {
- stat->max_interval = interval;
- }
-
- return interval;
-}
-
-NSTACK_STATIC inline void
-print_info_on_reply (long send_sec, long send_usec, u32 send_seq,
- stat_info * stat, struct sockaddr_in *dst_addr)
-{
- struct timespec send_time;
- struct timespec recv_time;
- if (0 != clock_gettime (CLOCK_MONOTONIC, &recv_time))
- {
- printf ("Failed to get time, errno = %d\n", errno);
- }
-
- send_time.tv_sec = send_sec;
- send_time.tv_nsec = send_usec;
-
- double interval = cal_interval (&send_time, &recv_time, stat);
- const char *remote_ip = inet_ntoa (dst_addr->sin_addr);
- printf ("%lu bytes from %s: icmp_seq=%u, time=%.3f ms\n",
- sizeof (icmp_head), remote_ip, send_seq % (MAX_SHORT + 1),
- interval);
-}
-
-NSTACK_STATIC inline void
-print_info_on_no_reply (u32 send_seq, const char *remote_ip)
-{
- printf ("No data from %s, icmp_seq=%u, Destination Host Unreachable\n",
- remote_ip, send_seq);
-}
-
-static inline int
-expect_addr (int expect, int addr)
-{
- return (expect == addr);
-}
-
-NSTACK_STATIC inline int
-parse_icmp_reply (char *buf, unsigned int buf_len, u32 my_pid, u32 send_seq,
- stat_info * stat, struct sockaddr_in *dst_addr)
-{
- unsigned int ip_head_len;
- ip_head *recv_ip_head;
- icmp_head *recv_icmp_head;
-
- // parse all received ip package
- while (buf_len > sizeof (ip_head))
- {
- recv_ip_head = (ip_head *) buf;
-
- ip_head_len = recv_ip_head->ihl << 2;
- recv_icmp_head = (icmp_head *) (buf + ip_head_len);
- buf_len -= htons (recv_ip_head->tot_len);
-
- if (!expect_addr (dst_addr->sin_addr.s_addr, recv_ip_head->local_ip))
- {
- return 0;
- }
-
- if ((recv_icmp_head->icmp_type == ICMP_REPLY)
- && (recv_icmp_head->icmp_id == my_pid)
- && (recv_icmp_head->icmp_seq == send_seq % (MAX_SHORT + 1)))
- {
- print_info_on_reply (recv_icmp_head->icmp_sec,
- recv_icmp_head->icmp_nsec, send_seq, stat,
- dst_addr);
-
- return 1;
- }
-
- buf += ip_head_len;
- }
-
- return 0;
-}
-
-NSTACK_STATIC inline int
-recv_icmp_reply_ok (int socket, int my_pid, u32 send_seq, stat_info * stat,
- struct sockaddr_in *dst_addr)
-{
-#define MAX_RECV_BUFF_SIZE (200 * sizeof(icmp_head))
-
- struct sockaddr_in remote_addr;
- unsigned int addr_len = sizeof (remote_addr);
- char recv_buf[MAX_RECV_BUFF_SIZE];
-
- int recv_ret = recvfrom (socket, recv_buf, MAX_RECV_BUFF_SIZE, 0,
- (struct sockaddr *) &remote_addr, &addr_len);
-
- if (recv_ret < 0)
- {
- return 0;
- }
-
- if (!parse_icmp_reply
- (recv_buf, (unsigned int) recv_ret, my_pid, send_seq, stat, dst_addr))
- {
- return 0;
- }
-
- return 1;
-}
-
-// check recv msg in 2 us
-/* BEGIN: Added for PN:CODEDEX by l00351127, 2017/11/14 CID:50811*/
-NSTACK_STATIC void
-recv_icmp_reply (int socket, pid_t my_pid, input_info * input,
- stat_info * stat, struct sockaddr_in *dst_addr)
-/* END: Added for PN:CODEDEX by l00351127, 2017/11/14 */
-{
-#define MAX_SLEEP_TIME (2 * US_TO_NS)
-#define MAX_WAIT_TIME (1000 * MS_TO_NS)
-
- int recv_ok = 0;
- int retry = 0;
- long sleep_all = 0;
- long sleep_time = 0;
-
- u32 expect_seq = stat->send_seq;
-
- while (retry < input->retry_count)
- {
- if (recv_icmp_reply_ok (socket, my_pid, expect_seq, stat, dst_addr))
- {
- recv_ok = 1;
- stat->recv_ok++;
- break;
- }
-
- sleep_all += MAX_SLEEP_TIME;
- sys_sleep_ns (0, MAX_SLEEP_TIME);
- retry++;
- }
-
- if (!recv_ok)
- {
- print_info_on_no_reply (expect_seq, input->dst_ip);
- }
-
- if (sleep_all < MAX_WAIT_TIME)
- {
- sleep_time = MAX_WAIT_TIME - sleep_all;
- sys_sleep_ns (0, sleep_time);
- }
-}
-
-NSTACK_STATIC inline int
-is_digit_nping (char *str)
-{
- if (NULL == str || '\0' == str[0])
- {
- return 0;
- }
-
- while (*str)
- {
- if (*str > '9' || *str < '0')
- {
- return 0;
- }
-
- str++;
- }
-
- return 1;
-}
-
-#define MIN_IP_LEN_NPING 7 //the length of string ip addr x.x.x.x is 7, 4 numbers + 3 dots = 7
-#define MAX_IP_LEN_NPING 15 //the length of string ip addr xxx.xxx.xxx.xxx is 15, 12 numbers + 3 dots = 15
-
-NSTACK_STATIC inline int
-is_ip_addr_nping (char *param_addr)
-{
- int ipseg1;
- int ipseg2;
- int ipseg3;
- int ipseg4;
-
- if (NULL == param_addr)
- {
- return 0;
- }
-
- size_t len = strlen (param_addr);
- if (len < MIN_IP_LEN_NPING || len > MAX_IP_LEN_NPING) // valid ip MIN_IP_LEN=7, MAX_IP_LEN=15
- {
- printf ("Input IP format error.\n");
- return 0;
- }
-
- if (SSCANF_S (param_addr, "%d.%d.%d.%d", &ipseg1, &ipseg2, &ipseg3, &ipseg4)
- != 4)
- {
- return 0;
- }
-
- if ((ipseg1 & 0xffffff00)
- || (ipseg2 & 0xffffff00)
- || (ipseg3 & 0xffffff00) || (ipseg4 & 0xffffff00))
- {
- return 0;
- }
-
- return 1;
-}
-
-NSTACK_STATIC inline bool
-check_nping_input_para (input_info * input)
-{
- if (input->send_count < 1)
- {
- return false;
- }
-
- if (input->retry_count < NPING_RETRY_COUNT
- || input->retry_count > MAX_NPING_RETRY_COUNT)
- {
- return false;
- }
-
- if (0 == input->src_ip[0] || 0 == input->dst_ip[0])
- {
- return false;
- }
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_nping_input_para (int argc, char **argv, input_info * input)
-{
- int opt = 0;
- bool arg_invalid = false;
-
- if (argc < 2)
- {
- return false;
- }
-
- if (!is_ip_addr_nping (argv[1]))
- {
- return false;
- }
-
- /* CID 36687 (#1 of 2): Unchecked return value (CHECKED_RETURN) */
- if (EOK != STRCPY_S (input->dst_ip, sizeof (input->dst_ip), argv[1]))
- {
- printf ("STRCPY_S failed.\n");
- return false;
- }
-
- while (1)
- {
- opt = getopt (argc - 1, &argv[1], g_nping_short_options);
- if (-1 == opt)
- {
- break;
- }
-
- switch (opt)
- {
- // for short options
- case 'c':
- input->send_count = atoi (optarg);
- break;
- case 'r':
- input->retry_count = atoi (optarg);
- break;
- case 'I':
- /* CID 36687 (#2 of 2): Unchecked return value (CHECKED_RETURN) */
- if (!is_ip_addr_nping (optarg))
- {
- return false;
- }
- if (EOK != STRCPY_S (input->src_ip, sizeof (input->src_ip), optarg))
- {
- printf ("STRCPY_S failed.\n");
- return false;
- }
- break;
- default:
- arg_invalid = true;
- break;
- }
-
- if (arg_invalid)
- {
- return false;
- }
- }
-
- if (!check_nping_input_para (input))
- {
- return false;
- }
-
- return true;
-}
-
-void
-print_help_nping ()
-{
- printf
- ("usage:nping destination [-c send_count -I src_addr -r retry_count]\n");
- printf ("send count range:1-2147483647\n");
- printf ("retry count range:1000-20000\n");
-}
-
-NSTACK_STATIC inline void
-init_input_info (input_info * input)
-{
- if (EOK != MEMSET_S (input, sizeof (input_info), 0, sizeof (input_info)))
- {
- printf ("MEMSET_S failed.\n");
- return;
- }
-
- input->send_count = 100000;
- input->retry_count = NPING_RETRY_COUNT;
-}
-
-NSTACK_STATIC inline void
-init_stat_info (stat_info * stat)
-{
- stat->max_interval = 0;
- stat->min_interval = 0xFFFFFFFF;
-}
-
-#ifndef NSTACK_STATIC_CHECK
-int
-main (int argc, char *argv[])
-#else
-int
-nping_main (int argc, char *argv[])
-#endif
-{
- struct sockaddr_in local_addr;
- struct sockaddr_in remote_addr;
- int send_ret;
- int ret = -1;
- int icmp_sock;
-
- pid_t my_pid;
-
- if (EOK !=
- MEMSET_S (&local_addr, sizeof (local_addr), 0, sizeof (local_addr)))
- {
- printf ("MEMSET_S failed.\n");
- return 0;
- }
- local_addr.sin_family = AF_INET;
-
- init_input_info (&g_input_info);
- init_stat_info (&g_stat_info);
-
- if (!get_nping_input_para (argc, argv, &g_input_info))
- {
- print_help_nping ();
- return 0;
- }
-
- if ((icmp_sock = socket (AF_INET, CUSTOM_SOCK_TYPE, IPPROTO_ICMP)) < 0)
- {
- printf ("create socket failed.\n");
- return 0;
- }
-
- local_addr.sin_addr.s_addr = inet_addr (g_input_info.src_ip);
-
- if (0 !=
- bind (icmp_sock, (struct sockaddr *) &local_addr,
- sizeof (struct sockaddr)))
- {
- printf ("bind failed, src ip %s\n", g_input_info.src_ip);
- close (icmp_sock);
- return 0;
- }
-
- int opt = 1;
- ret = ioctl (icmp_sock, FIONBIO, &opt);
- if (-1 == ret)
- {
- printf ("fcntl O_NONBLOCK fail\n");
- close (icmp_sock);
- return 0;
- }
-
- if (EOK !=
- MEMSET_S (&remote_addr, sizeof (remote_addr), 0, sizeof (remote_addr)))
- {
- printf ("MEMSET_S failed.\n");
- close (icmp_sock);
- return 0;
- }
-
- remote_addr.sin_family = AF_INET;
- remote_addr.sin_addr.s_addr = inet_addr (g_input_info.dst_ip);
-
- my_pid = getpid ();
- printf ("nping %s %lu bytes of data, pid:%d.\n", g_input_info.dst_ip,
- sizeof (icmp_head), my_pid);
-
- signal (SIGINT, user_exit);
-
- int loop_count = 0;
- if (0 != clock_gettime (CLOCK_MONOTONIC, &g_stat_info.start_time))
- {
- printf ("Failed to get time, errno = %d\n", errno);
- }
-
-/* BEGIN: Added for PN:CODEDEX by l00351127, 2017/11/14 CID:50811*/
- i32 send_count = g_input_info.send_count;
-/* END: Added for PN:CODEDEX by l00351127, 2017/11/14 */
-
- while (!g_exit && (loop_count < send_count))
- {
- send_ret =
- send_icmp_req (icmp_sock, my_pid, &g_stat_info, &remote_addr);
- if (send_ret < 0)
- {
- break;
- }
-
- recv_icmp_reply (icmp_sock, my_pid, &g_input_info, &g_stat_info,
- &remote_addr);
-
- loop_count++;
- }
-
- close (icmp_sock);
-
- if (0 != clock_gettime (CLOCK_MONOTONIC, &g_stat_info.end_time))
- {
- printf ("Failed to get time, errno = %d\n", errno);
- }
-
- print_stat (&g_stat_info, g_input_info.dst_ip);
-
- return 0;
-}
diff --git a/stacks/lwip_stack/tools/ntcpdump.c b/stacks/lwip_stack/tools/ntcpdump.c
deleted file mode 100644
index 31a96bc..0000000
--- a/stacks/lwip_stack/tools/ntcpdump.c
+++ /dev/null
@@ -1,1368 +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 <arpa/inet.h>
-#include <unistd.h>
-#include <signal.h>
-#include <time.h>
-#include <malloc.h>
-#include <stdio.h>
-#include <getopt.h>
-#include <unistd.h>
-#include "types.h"
-#include "nsfw_init.h"
-#include "nsfw_mem_api.h"
-#include "nsfw_fd_timer_api.h"
-#include "nsfw_maintain_api.h"
-#include "nstack_securec.h"
-
-#include "tool_common.h"
-
-NSTACK_STATIC struct option g_dump_long_options[] = {
- {"host", 1, NULL, OPT_ARG_HOST},
- {"lhost", 1, NULL, OPT_ARG_LOCAL_HOST},
- {"rhost", 1, NULL, OPT_ARG_REMOTE_HOST},
- {"port", 1, NULL, OPT_ARG_PORT},
- {"lport", 1, NULL, OPT_ARG_LOCAL_PORT},
- {"rport", 1, NULL, OPT_ARG_REMOTE_PORT},
- {"mac", 1, NULL, OPT_ARG_MAC},
- {"lmac", 1, NULL, OPT_ARG_LOCAL_MAC},
- {"rmac", 1, NULL, OPT_ARG_REMOTE_MAC},
- {0, 0, 0, 0}
-};
-
-static char *g_dump_short_options = "c:s:w:y:G:P:T:";
-
-NSTACK_STATIC FILE *g_dump_fp = NULL;
-static u32 g_dumped_packet = 0;
-NSTACK_STATIC u32 g_captured_packet = 0;
-static u32 g_filtered_packet = 0;
-
-NSTACK_STATIC bool g_dump_exit = 0;
-
-static dump_timer_info g_dump_hbt_timer;
-NSTACK_STATIC dump_condition g_dump_condition;
-static nsfw_mem_name g_dump_mem_ring_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, DUMP_SHMEM_RIGN_NAME };
-static nsfw_mem_name g_dump_mem_pool_info =
- { NSFW_SHMEM, NSFW_PROC_MAIN, DUMP_SHMEM_POOL_NAME };
-
-void
-dump_exit ()
-{
- g_dump_exit = 1;
-}
-
-void
-print_help_ntcpdump ()
-{
- printf ("usage:ntcpdump \n\
- -c count \n\
- -s len \n\
- -w file \n\
- -y l2_protocol \n\
- -T l3_protocol \n\
- -G dump_seconds \n\
- -P in/out/inout \n\
- --host/rhost/lhost ip_addr \n\
- --port/rport/lport port \n\
- --mac/rmac/lmac mac_addr\n");
-}
-
-bool
-is_digit_ntcpdump (char *str, size_t src_len)
-{
- size_t count = 0;
-
- if (NULL == str || 0 == *str)
- {
- return FALSE;
- }
-
- while (*str)
- {
- if (*str > '9' || *str < '0')
- {
- return false;
- }
-
- str++;
- count++;
- }
-
- if (count > src_len)
- {
- return false;
- }
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-is_ip_addr (const char *addr, ip_addr_bits * addr_info)
-{
- u32 ip1;
- u32 ip2;
- u32 ip3;
- u32 ip4;
-
- if (SSCANF_S (addr, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) != 4)
- {
- return false;
- }
-
- if ((ip1 & 0xffffff00) || (ip2 & 0xffffff00) || (ip3 & 0xffffff00)
- || (ip4 & 0xffffff00))
- {
- return false;
- }
-
- addr_info->addr_bits1 = ip1;
- addr_info->addr_bits2 = ip2;
- addr_info->addr_bits3 = ip3;
- addr_info->addr_bits4 = ip4;
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_ip_addr (const char *addr, u32 * ip_addr)
-{
- ip_addr_bits addr_info;
- if (!is_ip_addr (addr, &addr_info))
- {
- return false;
- }
-
- *ip_addr = ((addr_info.addr_bits1 & 0xFF)
- | (addr_info.addr_bits2 & 0xFF) << 8
- | (addr_info.addr_bits3 & 0xFF) << 16
- | (addr_info.addr_bits4 & 0xFF) << 24);
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_dump_port (const char *pport, u16 * port)
-{
- int user_port;
-
- if (!is_digit_ntcpdump ((char *) pport, MAX_PORT_STR_LEN))
- {
- return false;
- }
-
- user_port = atoi (pport);
- if (user_port < 1024 || user_port > 65535)
- {
- return false;
- }
-
- *port = (unsigned short) user_port;
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_dump_len (char *plen, u32 * limit_len)
-{
- if (!is_digit_ntcpdump (plen, MAX_INTEGER_STR_LEN))
- {
- return false;
- }
-
- *limit_len = atoi (plen);
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_mac_addr (const char *opt_value, char *mac_addr)
-{
- /* avoid coredump when opt_value is NULL */
- if (NULL == opt_value)
- {
- return false;
- }
-
- size_t org_len = strlen (opt_value);
- if (org_len != MAC_ADDR_STR_LEN)
- {
- return false;
- }
-
- u32 tmp_mac[MAC_ADDR_LEN];
-
- if (6 != SSCANF_S (opt_value, "%x:%x:%x:%x:%x:%x",
- &tmp_mac[0],
- &tmp_mac[1],
- &tmp_mac[2], &tmp_mac[3], &tmp_mac[4], &tmp_mac[5]))
- {
- return false;
- }
-
- int i = 0;
- for (; i < MAC_ADDR_LEN; i++)
- {
- if (tmp_mac[i] > 0xFF)
- {
- // 01:02:03:04:5:1FF
- return false;
- }
-
- mac_addr[i] = tmp_mac[i];
- }
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-check_file_name (const char *file_name)
-{
- if (0 == access (file_name, F_OK))
- {
- printf ("dump file exist, file name=%s.\n", file_name);
- return false;
- }
- return true;
-}
-
-NSTACK_STATIC inline u16
-get_para_direction (const char *para)
-{
- if (0 == strcasecmp (para, "out"))
- {
- return DUMP_SEND;
- }
-
- if (0 == strcasecmp (para, "in"))
- {
- return DUMP_RECV;
- }
-
- if (0 == strcasecmp (para, "inout"))
- {
- return DUMP_SEND_RECV;
- }
-
- return INVALID_DIRECTION;
-}
-
-NSTACK_STATIC inline u16
-get_para_l2_protocol (const char *para)
-{
- if (0 == strcasecmp (para, "arp"))
- {
- return PROTOCOL_ARP;
- }
-
- if (0 == strcasecmp (para, "rarp"))
- {
- return PROTOCOL_RARP;
- }
-
- if (0 == strcasecmp (para, "ip"))
- {
- return PROTOCOL_IP;
- }
-
- if (0 == strcasecmp (para, "oam"))
- {
- return PROTOCOL_OAM_LACP;
- }
-
- if (0 == strcasecmp (para, "lacp"))
- {
- return PROTOCOL_OAM_LACP;
- }
-
- return INVALID_L2_PROTOCOL;
-}
-
-NSTACK_STATIC inline u16
-get_para_l3_protocol (const char *para)
-{
- if (0 == strcasecmp (para, "tcp"))
- {
- return PROTOCOL_TCP;
- }
-
- if (0 == strcasecmp (para, "udp"))
- {
- return PROTOCOL_UDP;
- }
-
- if (0 == strcasecmp (para, "icmp"))
- {
- return PROTOCOL_ICMP;
- }
-
- return INVALID_L3_PROTOCOL;
-}
-
-NSTACK_STATIC bool
-parse_long_options (int opt, const char *long_opt_arg, int optindex,
- dump_condition * filter_info)
-{
- switch (opt)
- {
- case OPT_ARG_HOST:
- if (!get_ip_addr (long_opt_arg, &filter_info->ip_addr))
- {
- printf ("invalid ip addr, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->ip_set_flag |= COND_OR_SET;
- break;
- case OPT_ARG_LOCAL_HOST:
- if (!get_ip_addr (long_opt_arg, &filter_info->local_ip))
- {
- printf ("invalid ip addr, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->ip_set_flag |= COND_LOCAL_SET;
- break;
- case OPT_ARG_REMOTE_HOST:
- if (!get_ip_addr (long_opt_arg, &filter_info->remote_ip))
- {
- printf ("invalid ip addr, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->ip_set_flag |= COND_REMOTE_SET;
- break;
- case OPT_ARG_PORT:
- if (!get_dump_port (long_opt_arg, &filter_info->port))
- {
- printf ("invalid port, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->port_set_flag |= COND_OR_SET;
- break;
- case OPT_ARG_LOCAL_PORT:
- if (!get_dump_port (long_opt_arg, &filter_info->local_port))
- {
- printf ("invalid port, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->port_set_flag |= COND_LOCAL_SET;
- break;
- case OPT_ARG_REMOTE_PORT:
- if (!get_dump_port (long_opt_arg, &filter_info->remote_port))
- {
- printf ("invalid port, optindex=%d, port=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->port_set_flag |= COND_REMOTE_SET;
- break;
- case OPT_ARG_MAC:
- if (!get_mac_addr (long_opt_arg, filter_info->mac_addr))
- {
- printf ("invalid mac addr, optindex=%d, mac=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->mac_set_flag |= COND_OR_SET;
- break;
- case OPT_ARG_LOCAL_MAC:
- if (!get_mac_addr (long_opt_arg, filter_info->local_mac))
- {
- printf ("invalid mac addr, optindex=%d, mac=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->mac_set_flag |= COND_LOCAL_SET;
- break;
- case OPT_ARG_REMOTE_MAC:
- if (!get_mac_addr (long_opt_arg, filter_info->remote_mac))
- {
- printf ("invalid mac addr, optindex=%d, mac=%s.\n", optindex,
- long_opt_arg);
- return false;
- }
- filter_info->mac_set_flag |= COND_REMOTE_SET;
- break;
- default:
- printf ("unknow arg, optindex=%d, arg=%s.\n", optindex, long_opt_arg);
- return false;
- }
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-condition_valid (dump_condition * condition)
-{
- // check direction
- if (INVALID_DIRECTION == condition->direction)
- {
- printf ("direction invalid.\n");
- return false;
- }
-
- // check l2 protocol
- if (INVALID_L2_PROTOCOL == condition->l2_protocol)
- {
- printf ("L2 protocol invalid.\n");
- return false;
- }
-
- // check l3 protocol
- if (INVALID_L3_PROTOCOL == condition->l3_protocol)
- {
- printf ("L3 protocol invalid.\n");
- return false;
- }
-
- // check ip
- if (condition->ip_set_flag > 0x4)
- {
- printf ("IP options invalid.\n");
- return false;
- }
-
- // check port
- if (condition->port_set_flag > 0x4)
- {
- printf ("Port options invalid.\n");
- return false;
- }
-
- // check mac
- if (condition->mac_set_flag > 0x4)
- {
- printf ("MAC options invalid.\n");
- return false;
- }
-
- if (condition->dump_time > MAX_DUMP_TIME
- || condition->dump_time < MIN_DUMP_TIME)
- {
- printf ("dump time invalid.\n");
- return false;
- }
-
- return true;
-}
-
-NSTACK_STATIC inline bool
-get_dump_condition (int argc, char **argv, dump_condition * filter_info)
-{
- int opt = 0;
- int opt_index = 0;
- bool arg_invalid = false;
- filter_info->has_condition = 0;
-
- if (argc < 2)
- {
- // dump all package
- return true;
- }
-
- while (1)
- {
- opt =
- getopt_long (argc, argv, g_dump_short_options, g_dump_long_options,
- &opt_index);
- if (-1 == opt)
- {
- break;
- }
-
- switch (opt)
- {
- // for short options
- case 'c':
- filter_info->dump_count = atoi (optarg);
- break;
- case 's':
- if (!get_dump_len (optarg, &filter_info->limit_len))
- {
- printf ("length invalid, optindex=%d, arg=%s.\n", opt_index,
- optarg);
- arg_invalid = true;
- }
- break;
- case 'w':
- if (!check_file_name (optarg))
- {
- printf ("invalid file name, optindex=%d, arg=%s.\n", opt_index,
- optarg);
- arg_invalid = true;
- }
- else
- {
- filter_info->dump_file_name = optarg;
- }
- break;
- case 'y':
- filter_info->l2_protocol = get_para_l2_protocol (optarg);
- break;
- case 'G':
- filter_info->dump_time = atoi (optarg);
- break;
- case 'P':
- filter_info->direction = get_para_direction (optarg);
- break;
- case 'T':
- filter_info->l3_protocol = get_para_l3_protocol (optarg);
- break;
- case '?':
- arg_invalid = true;
- break;
- // for long options
- default:
- if (!parse_long_options (opt, optarg, opt_index, filter_info))
- {
- arg_invalid = true;
- }
- break;
- }
-
- if (arg_invalid)
- {
- print_help_ntcpdump ();
- return false;
- }
-
- filter_info->has_condition = 1;
- }
-
- if (!condition_valid (filter_info))
- {
- filter_info->has_condition = 0;
- return false;
- }
-
- return true;
-}
-
-NSTACK_STATIC inline void
-open_file ()
-{
- if (NULL == g_dump_condition.dump_file_name)
- {
- return;
- }
-
- g_dump_fp = fopen (g_dump_condition.dump_file_name, "w+");
- if (NULL == g_dump_fp)
- {
- printf ("open file %s failed\n", g_dump_condition.dump_file_name);
- }
-}
-
-NSTACK_STATIC inline void
-close_file ()
-{
- if (NULL != g_dump_fp)
- {
- fclose (g_dump_fp);
- g_dump_fp = NULL;
- }
-}
-
-NSTACK_STATIC inline void
-write_file_head (FILE * fp)
-{
- dump_file_head file_head;
- file_head.magic = 0xA1B2C3D4;
- file_head.major_ver = 2; // 0x0200;
- file_head.minor_ver = 4; // 0x0400;
- file_head.area = 0;
- file_head.time_stamp = 0;
- file_head.max_pack_size = 0x0000FFFF; // 0xFFFF0000;
- file_head.link_type = 1; //0x01000000;
-
- if (fwrite (&file_head, sizeof (dump_file_head), 1, fp) != 1)
- {
- return;
- }
-
- fflush (fp);
-}
-
-NSTACK_STATIC inline void
-write_packet (parse_msg_info * pmsg, FILE * fp)
-{
- packet_head pack_head;
- dump_msg_info *org_msg = (dump_msg_info *) pmsg->org_msg;
- pack_head.sec = org_msg->dump_sec;
- pack_head.usec = org_msg->dump_usec;
- pack_head.save_len =
- (u32) nstack_min (org_msg->len, g_dump_condition.limit_len);
- pack_head.org_len = org_msg->len;
-
- if (fwrite (&pack_head, sizeof (packet_head), 1, fp) != 1)
- {
- // log error
- return;
- }
-
- if (fwrite (org_msg->buf, pack_head.save_len, 1, fp) != 1)
- {
- // log error
- return;
- }
-
- fflush (fp);
- return;
-}
-
-#define EMPTY(x) (0 == (x))
-#define EQUAL(x, y) ((x) == (y))
-
-#define STR_EMPTY(str) (0 == str[0])
-#define STR_EQUAL(str1, str2, len) (0 == memcmp(str1, str2, len))
-
-#define MATCH(cond, info, field) \
- (EQUAL(cond->field, info->field))
-
-#define MATCH_MORE(cond, field, info, field1, field2) \
- (EQUAL(cond->field, info->field1) || EQUAL(cond->field, info->field2))
-
-#define MATCH_STR(cond, info, field, len) \
- (STR_EQUAL(cond->field, info->field, len))
-
-#define MATCH_STR_MORE(cond, field, info, field1, field2, len) \
- (STR_EQUAL(cond->field, info->field1, len) || STR_EQUAL(cond->field, info->field2, len))
-
-NSTACK_STATIC inline bool
-ip_match (dump_condition * condition, parse_msg_info * msg_info)
-{
- bool ret = false;
- switch (condition->ip_set_flag)
- {
- case COND_NOT_SET:
- ret = true;
- break;
- case COND_LOCAL_SET:
- if (MATCH (condition, msg_info, local_ip))
- {
- ret = true;
- }
- break;
- case COND_REMOTE_SET:
- if (MATCH (condition, msg_info, remote_ip))
- {
- ret = true;
- }
- break;
- case COND_AND_SET:
- if (MATCH_MORE (condition, local_ip, msg_info, local_ip, remote_ip)
- && MATCH_MORE (condition, remote_ip, msg_info, local_ip, remote_ip))
- {
- ret = true;
- }
- break;
- case COND_OR_SET:
- if (MATCH_MORE (condition, ip_addr, msg_info, local_ip, remote_ip))
- {
- ret = true;
- }
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-NSTACK_STATIC inline bool
-port_match (dump_condition * condition, parse_msg_info * msg_info)
-{
- bool ret = false;
- switch (condition->port_set_flag)
- {
- case COND_NOT_SET:
- ret = true;
- break;
- case COND_LOCAL_SET:
- if (MATCH (condition, msg_info, local_port))
- {
- ret = true;
- }
- break;
- case COND_REMOTE_SET:
- if (MATCH (condition, msg_info, remote_port))
- {
- ret = true;
- }
- break;
- case COND_AND_SET:
- if (MATCH (condition, msg_info, local_port)
- && MATCH (condition, msg_info, remote_port))
- {
- ret = true;
- }
- break;
- case COND_OR_SET:
- if (MATCH_MORE (condition, port, msg_info, local_port, remote_port))
- {
- ret = true;
- }
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-NSTACK_STATIC inline bool
-mac_match (dump_condition * condition, parse_msg_info * msg_info)
-{
- bool ret = false;
- switch (condition->mac_set_flag)
- {
- case COND_NOT_SET:
- ret = true;
- break;
- case COND_LOCAL_SET:
- if (MATCH_STR (condition, msg_info, local_mac, MAC_ADDR_LEN))
- {
- ret = true;
- }
- break;
- case COND_REMOTE_SET:
- if (MATCH_STR (condition, msg_info, remote_mac, MAC_ADDR_LEN))
- {
- ret = true;
- }
- break;
- case COND_AND_SET:
- if ((MATCH_STR_MORE
- (condition, local_mac, msg_info, local_mac, remote_mac,
- MAC_ADDR_LEN)
- && MATCH_STR_MORE (condition, remote_mac, msg_info, local_mac,
- remote_mac, MAC_ADDR_LEN)))
- {
- ret = true;
- }
- break;
- case COND_OR_SET:
- if (MATCH_STR_MORE
- (condition, mac_addr, msg_info, local_mac, remote_mac,
- MAC_ADDR_LEN))
- {
- ret = true;
- }
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-NSTACK_STATIC inline bool
-filter_by_condition (dump_condition * condition, parse_msg_info * msg_info)
-{
- dump_msg_info *org_msg = (dump_msg_info *) msg_info->org_msg;
- if (0 == condition->has_condition)
- {
- return false;
- }
-
- // direction
- if (!(condition->direction & org_msg->direction))
- {
- return true;
- }
-
- // l2_protocol
- if ((0 != condition->l2_protocol)
- && !MATCH (condition, msg_info, l2_protocol))
- {
- return true;
- }
-
- // l3_protocol
- if ((0 != condition->l3_protocol)
- && !MATCH (condition, msg_info, l3_protocol))
- {
- return true;
- }
-
- // ip
- if (!ip_match (condition, msg_info))
- {
- return true;
- }
-
- // port
- if (!port_match (condition, msg_info))
- {
- return true;
- }
-
- // mac
- if (!mac_match (condition, msg_info))
- {
- return true;
- }
-
- return false;
-}
-
-NSTACK_STATIC inline char *
-get_l2_protocol_desc (u16 l2_protocol)
-{
- switch (l2_protocol)
- {
- case PROTOCOL_IP:
- return "IP";
- case PROTOCOL_ARP:
- return "ARP";
- case PROTOCOL_RARP:
- return "RARP";
- case PROTOCOL_OAM_LACP:
- return "OAM/LACP";
- default:
- return "unknown";
- }
-}
-
-NSTACK_STATIC inline char *
-get_l3_protocol_desc (u16 l3_protocol)
-{
- switch (l3_protocol)
- {
- case PROTOCOL_ICMP:
- return "ICMP";
- case PROTOCOL_TCP:
- return "TCP";
- case PROTOCOL_UDP:
- return "UDP";
- default:
- return "unknown";
- }
-}
-
-NSTACK_STATIC inline void
-get_ip_str (char *pip_addr, u32 ip_addr_len, u32 ip)
-{
- int retVal;
- retVal = SPRINTF_S (pip_addr, ip_addr_len, "%d.%d.%d.%d",
- ip & 0x000000FF,
- (ip & 0x0000FF00) >> 8,
- (ip & 0x00FF0000) >> 16, (ip & 0xFF000000) >> 24);
- if (-1 == retVal)
- {
- printf ("get_ip_str:SPRINTF_S failed %d.\n", retVal);
- }
-}
-
-NSTACK_STATIC inline void
-print_packet (parse_msg_info * msg_info, u32 seq)
-{
- char str_local_ip[IP_ADDR_LEN];
- char str_remote_ip[IP_ADDR_LEN];
- get_ip_str (str_local_ip, sizeof (str_local_ip), msg_info->local_ip);
- get_ip_str (str_remote_ip, sizeof (str_remote_ip), msg_info->remote_ip);
-
- dump_msg_info *org_msg = (dump_msg_info *) msg_info->org_msg;
-
- printf ("%-6d %-6d:%6d %-8s %-8s %-16s %-16s %-10d %-10d %-8d\n",
- seq,
- org_msg->dump_sec, org_msg->dump_usec,
- get_l2_protocol_desc (msg_info->l2_protocol),
- get_l3_protocol_desc (msg_info->l3_protocol),
- str_local_ip,
- str_remote_ip,
- msg_info->local_port, msg_info->remote_port, org_msg->len);
-}
-
-void
-print_head ()
-{
- if (NULL != g_dump_fp)
- {
- write_file_head (g_dump_fp);
- }
- else
- {
- printf ("ntcpdump start listening:\n");
- printf ("%-6s %-18s %-8s %-8s %-16s %-16s %-10s %-10s %-8s\n",
- "Frame", "sec:usec", "L2", "L3", "Src IP", "Dest IP",
- "Src Port", "Dest Port", "Length");
- }
-}
-
-void
-register_dump_signal ()
-{
- signal (SIGINT, dump_exit);
-}
-
-NSTACK_STATIC inline void
-init_parse_msg_info (parse_msg_info * info)
-{
- int retVal =
- MEMSET_S (info, sizeof (parse_msg_info), 0, sizeof (parse_msg_info));
- if (EOK != retVal)
- {
- printf ("MEMSET_S failed.\n");
- }
-}
-
-NSTACK_STATIC inline void
-parse_msg (dump_msg_info * msg, parse_msg_info * info)
-{
- init_parse_msg_info (info);
-
- info->org_msg = msg;
-
- char *pmsg = msg->buf;
- u32 len = msg->len;
- /* BEGIN: Added for PN:CODEDEX by l00351127, 2017/11/14 CID:50886 */
- if (len < MAC_ADDR_LEN + MAC_ADDR_LEN + sizeof (u16))
- {
- return;
- }
- /* END: Added for PN:CODEDEX by l00351127, 2017/11/14 */
-
- // get mac addr
- if (EOK !=
- MEMCPY_S (info->remote_mac, sizeof (info->remote_mac), pmsg,
- MAC_ADDR_LEN))
- {
- return;
- }
-
- pmsg += MAC_ADDR_LEN;
- len -= MAC_ADDR_LEN;
-
- if (EOK !=
- MEMCPY_S (info->local_mac, sizeof (info->local_mac), pmsg,
- MAC_ADDR_LEN))
- {
- return;
- }
-
- pmsg += MAC_ADDR_LEN;
- len -= MAC_ADDR_LEN;
-
- info->l2_protocol = htons (*(u16 *) pmsg);
- pmsg += sizeof (u16);
- len -= sizeof (u16);
-
- if (PROTOCOL_IP != info->l2_protocol)
- {
- return;
- }
-
- ip_head *p_ip_head = (ip_head *) pmsg;
- if (len < p_ip_head->ihl)
- {
- return;
- }
-
- info->local_ip = p_ip_head->local_ip;
- info->remote_ip = p_ip_head->remote_ip;
- info->l3_protocol = p_ip_head->protocol;
-
- pmsg += p_ip_head->ihl * sizeof (u32);
-
- if (PROTOCOL_TCP == info->l3_protocol)
- {
- tcp_head *p_tcp_head = (tcp_head *) pmsg;
- info->local_port = htons (p_tcp_head->src_port);
- info->remote_port = htons (p_tcp_head->dst_port);
- return;
- }
-
- if (PROTOCOL_UDP == info->l3_protocol)
- {
- udp_head *p_udp_head = (udp_head *) pmsg;
- info->local_port = htons (p_udp_head->src_port);
- info->remote_port = htons (p_udp_head->dst_port);
- return;
- }
-
- return;
-}
-
-NSTACK_STATIC inline bool
-time_expired (struct timespec * start_time, u32 work_sec)
-{
-#define TIME_EXPIRE_CHECK_COUNT 1000
-
- static u32 loop_count = 0;
- loop_count++;
-
- if (0 != loop_count % TIME_EXPIRE_CHECK_COUNT)
- {
- return false;
- }
-
- struct timespec cur_time;
- GET_CUR_TIME (&cur_time);
-
- if (cur_time.tv_sec - start_time->tv_sec > work_sec)
- {
- return true;
- }
-
- return false;
-}
-
-NSTACK_STATIC void
-dump_packet (parse_msg_info * msg)
-{
- g_dumped_packet++;
- if (!g_dump_fp)
- {
- print_packet (msg, g_dumped_packet);
- return;
- }
-
- write_packet (msg, g_dump_fp);
-}
-
-NSTACK_STATIC void
-dump_msg (mring_handle dump_ring, mring_handle dump_pool,
- dump_condition * condition, struct timespec *start_time)
-{
- u32 dump_count = 0;
- open_file ();
-
- print_head ();
-
- void *msg = NULL;
- while (!g_dump_exit
- && (dump_count < condition->dump_count)
- && !time_expired (start_time, condition->dump_time))
- {
- if (nsfw_mem_ring_dequeue (dump_ring, &msg) <= 0)
- {
- sys_sleep_ns (0, 10000);
- continue;
- }
-
- if (NULL == msg)
- {
- continue;
- }
-
- parse_msg_info msg_info;
- parse_msg (msg, &msg_info);
-
- g_captured_packet++;
- if (!condition->has_condition)
- {
- dump_packet (&msg_info);
- dump_count++;
- nsfw_mem_ring_enqueue (dump_pool, msg);
- continue;
- }
-
- if (filter_by_condition (condition, &msg_info))
- {
- g_filtered_packet++;
- nsfw_mem_ring_enqueue (dump_pool, msg);
- continue;
- }
-
- dump_packet (&msg_info);
- dump_count++;
- nsfw_mem_ring_enqueue (dump_pool, msg);
- }
-
- close_file ();
-}
-
-mring_handle
-dump_get_mem_ring ()
-{
- return nsfw_mem_ring_lookup (&g_dump_mem_ring_info);
-}
-
-mring_handle
-dump_get_mem_pool ()
-{
- return nsfw_mem_sp_lookup (&g_dump_mem_pool_info);
-}
-
-NSTACK_STATIC void
-dump_clear_mem (mring_handle ring, mring_handle pool)
-{
- void *msg = NULL;
- while (nsfw_mem_ring_dequeue (ring, &msg) > 0)
- {
- nsfw_mem_ring_enqueue (pool, msg);
- sys_sleep_ns (0, 1000);
- }
-}
-
-/* BEGIN: Added for PN:CODEDEX by l00351127, 2017/11/14 CID:50859*/
-i16
-dump_send_req (u16 op_type, i16 task_id, u32 task_keep_time)
-/* END: Added for PN:CODEDEX by l00351127, 2017/11/14 */
-{
- nsfw_mgr_msg *req =
- (nsfw_mgr_msg *) nsfw_mgr_msg_alloc (MGR_MSG_TOOL_TCPDUMP_REQ,
- NSFW_PROC_MAIN);
- if (NULL == req)
- {
- printf ("all message for getting instance id failed.\n");
- return -1;
- }
-
- nsfw_tool_dump_msg *req_body = GET_USER_MSG (nsfw_tool_dump_msg, req);
- req_body->op_type = op_type;
- req_body->task_id = task_id;
- req_body->task_keep_time = task_keep_time;
-
- nsfw_mgr_msg *rsp = nsfw_mgr_null_rspmsg_alloc ();
- if (NULL == rsp)
- {
- printf ("alloc rsp message for getting memory failed.\n");
- nsfw_mgr_msg_free (req);
- return -1;
- }
-
- if (!nsfw_mgr_send_req_wait_rsp (req, rsp))
- {
- printf ("request memory can not get response.\n");
- nsfw_mgr_msg_free (req);
- nsfw_mgr_msg_free (rsp);
- return -1;
- }
-
- if (rsp->src_proc_type != NSFW_PROC_MAIN
- || rsp->dst_proc_type != NSFW_PROC_TOOLS)
- {
- printf
- ("dump get wrong response, src or dst proc type error,src proc type=%u, dst proc type=%u.\n",
- rsp->src_proc_type, rsp->dst_proc_type);
- nsfw_mgr_msg_free (req);
- nsfw_mgr_msg_free (rsp);
- return -1;
- }
-
- if (rsp->msg_type != MGR_MSG_TOOL_TCPDUMP_RSP)
- {
- printf ("dump get wrong response, msg type error, msg type=%d.\n",
- rsp->msg_type);
- nsfw_mgr_msg_free (req);
- nsfw_mgr_msg_free (rsp);
- return -1;
- }
-
- nsfw_tool_dump_msg *rsp_body = GET_USER_MSG (nsfw_tool_dump_msg, rsp);
-
-/* BEGIN: Added for PN:CODEDEX by l00351127, 2017/11/14 CID:50859*/
- i16 new_task_id = rsp_body->task_id;
-/* END: Added for PN:CODEDEX by l00351127, 2017/11/14 */
-
- nsfw_mgr_msg_free (req);
- nsfw_mgr_msg_free (rsp);
-
- return new_task_id;
-}
-
-i16
-start_dump_task (u32 task_keep_time)
-{
- return dump_send_req (START_DUMP_REQ, -1, task_keep_time);
-}
-
-i16
-stop_dump_task (i16 task_id)
-{
- return dump_send_req (STOP_DUMP_REQ, task_id, 0);
-}
-
-NSTACK_STATIC void
-init_dump_condition (dump_condition * condition)
-{
- if (EOK !=
- MEMSET_S (condition, sizeof (dump_condition), 0,
- sizeof (dump_condition)))
- {
- printf ("MEMSET_S failed.\n");
- }
- condition->limit_len = DUMP_MSG_SIZE;
- condition->dump_time = DEFAULT_DUMP_TIME;
- condition->direction = 3;
- condition->dump_count = DEFAULT_DUMP_COUNT;
-}
-
-NSTACK_STATIC inline bool
-send_hbt_req (u32 seq, i16 task_id)
-{
- nsfw_mgr_msg *req =
- (nsfw_mgr_msg *) nsfw_mgr_msg_alloc (MGR_MSG_TOOL_HEART_BEAT,
- NSFW_PROC_MAIN);
- if (NULL == req)
- {
- printf ("all message for getting instance id failed.\n");
- return false;
- }
-
- nsfw_tool_hbt *req_body = GET_USER_MSG (nsfw_tool_hbt, req);
- req_body->seq = seq;
- req_body->task_id = task_id;
-
- if (!nsfw_mgr_send_msg (req))
- {
- printf ("request memory can not get response.\n");
- }
-
- nsfw_mgr_msg_free (req);
-
- return true;
-}
-
-NSTACK_STATIC bool
-on_send_hbt_req (u32 timer_type, void *data)
-{
- dump_timer_info *ptimer_info = (dump_timer_info *) data;
- // send heartbeat
-
- send_hbt_req (ptimer_info->seq, ptimer_info->task_id);
- ptimer_info->seq++;
-
- ptimer_info->ptimer =
- nsfw_timer_reg_timer (DUMP_HBT_TIMER, ptimer_info, on_send_hbt_req,
- *(struct timespec *) (ptimer_info->interval));
- return true;
-}
-
-NSTACK_STATIC bool
-start_dump_hbt (dump_timer_info * ptimer_info, i16 task_id)
-{
- struct timespec *time_interval =
- (struct timespec *) malloc (sizeof (struct timespec));
- if (NULL == time_interval)
- {
- return false;
- }
-
- time_interval->tv_sec = DUMP_HBT_INTERVAL;
- time_interval->tv_nsec = 0;
-
- ptimer_info->interval = time_interval;
- ptimer_info->seq = 1;
- ptimer_info->task_id = task_id;
-
- ptimer_info->ptimer =
- nsfw_timer_reg_timer (DUMP_HBT_TIMER, ptimer_info, on_send_hbt_req,
- *time_interval);
-
- return true;
-}
-
-NSTACK_STATIC bool
-stop_dump_hbt (dump_timer_info * ptimer_info)
-{
- free (ptimer_info->interval);
- /* fix "SET_NULL_AFTER_FREE" type codedex issue */
- ptimer_info->interval = NULL;
- nsfw_timer_rmv_timer (ptimer_info->ptimer);
- return true;
-}
-
-#ifndef NSTACK_STATIC_CHECK
-int
-main (int argc, char *argv[])
-#else
-int
-ntcpdump_main (int argc, char *argv[])
-#endif
-{
- register_dump_signal ();
-
- init_dump_condition (&g_dump_condition);
- if (!get_dump_condition (argc, argv, &g_dump_condition))
- {
- printf ("dump exit because of input invalid.\n");
- return INPUT_INVALID;
- }
-
- printf ("parse filter condition ok.\n");
-
- fw_poc_type proc_type = NSFW_PROC_TOOLS;
- nsfw_mem_para stinfo = { 0 };
- stinfo.iargsnum = 0;
- stinfo.pargs = NULL;
- stinfo.enflag = proc_type;
- nstack_framework_setModuleParam (NSFW_MEM_MGR_MODULE, &stinfo);
- nstack_framework_setModuleParam (NSFW_MGR_COM_MODULE,
- (void *) ((u64) proc_type));
- nstack_framework_setModuleParam (NSFW_TIMER_MODULE,
- (void *) ((u64) proc_type));
-
- if (0 != nstack_framework_init ())
- {
- printf ("dump init failed.\n");
- return FRAMEWORK_INIT_FAILED;
- }
-
- mring_handle dump_mem_pool = dump_get_mem_pool ();
- if (NULL == dump_mem_pool)
- {
- printf ("dump init mem pool failed.\n");
- return MEMPOOL_INIT_FAILED;
- }
-
- mring_handle dump_mem_ring = dump_get_mem_ring ();
- if (NULL == dump_mem_ring)
- {
- printf ("dump init mem ring failed.\n");
- return MEMRING_INIT_FAILED;
- }
-
- // initialize queue first
- dump_clear_mem (dump_mem_ring, dump_mem_pool);
-
- i16 task_id = start_dump_task (g_dump_condition.dump_time);
- if (task_id < 0 || task_id > MAX_DUMP_TASK)
- {
- printf ("start dump task failed.\n");
- return START_TASK_FAILED;
- }
-
- if (!start_dump_hbt (&g_dump_hbt_timer, task_id))
- {
- printf ("start dump heart beat timer failed.\n");
- return START_TIMER_FAILED;
- }
-
- struct timespec dump_start_time;
- GET_CUR_TIME (&dump_start_time);
- dump_msg (dump_mem_ring, dump_mem_pool, &g_dump_condition,
- &dump_start_time);
-
- i16 new_task_id = stop_dump_task (task_id);
- if (new_task_id != task_id)
- {
- printf ("stop dump task failed.\n");
- }
- /* modify deadcode type codedex issue */
- (void) stop_dump_hbt (&g_dump_hbt_timer);
-
- printf ("dump complete.\n");
- printf ("captured packets=%u.\n", g_captured_packet);
- printf ("dumped packets=%u.\n", g_dumped_packet);
- printf ("filtered packets=%u.\n", g_filtered_packet);
-
- return 0;
-}
diff --git a/stacks/lwip_stack/tools/tool_common.h b/stacks/lwip_stack/tools/tool_common.h
deleted file mode 100644
index 6d3526b..0000000
--- a/stacks/lwip_stack/tools/tool_common.h
+++ /dev/null
@@ -1,243 +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.
-*/
-
-#ifndef _TOOL_COMMON_H_
-#define _TOOL_COMMON_H_
-
-#include <time.h>
-#include "types.h"
-
-#ifndef NSTACK_STATIC
-#ifndef NSTACK_STATIC_CHECK
-#define NSTACK_STATIC static
-#else
-#define NSTACK_STATIC
-#endif
-#endif
-
-#ifndef IP_ADDR_LEN
-#define IP_ADDR_LEN 16
-#endif
-
-#ifndef MAC_ADDR_LEN
-#define MAC_ADDR_LEN 6
-#endif
-
-#ifndef MAC_ADDR_STR_LEN
-#define MAC_ADDR_STR_LEN 17
-#endif
-
-#define ICMP_ECHO 8
-#define ICMP_REPLY 0
-#define MS_TO_NS 1000000
-#define US_TO_NS 1000
-#define NPING_RETRY_COUNT 1000
-#define MAX_NPING_RETRY_COUNT 20000
-
-#define MAX_PORT_STR_LEN 5
-#define MAX_IP_STR_LEN 15
-#define MAX_INTEGER_STR_LEN 10
-
-#define DUMP_HBT_TIMER 1
-
-#define INVALID_DIRECTION 0xFFFF
-#define DEFAULT_DUMP_COUNT 1000
-
-#ifndef CUSTOM_SOCK_TYPE
-#define CUSTOM_SOCK_TYPE 0xF001
-#endif
-
-enum DUMP_ERR_CODE
-{
- RET_OK = 0,
- INPUT_INVALID = 1,
- FRAMEWORK_INIT_FAILED = 2,
- MEMPOOL_INIT_FAILED = 3,
- MEMRING_INIT_FAILED = 4,
- START_TASK_FAILED = 5,
- START_TIMER_FAILED = 6,
- UNKNOW_ERR
-};
-
-enum COND_LOCAL_REMOTE_SET
-{
- COND_NOT_SET = 0,
- COND_REMOTE_SET = 0x1,
- COND_LOCAL_SET = 0x2,
- COND_AND_SET = 0x3,
- COND_OR_SET = 0x4
-};
-
-enum DUMP_OPT_ARG
-{
- OPT_ARG_HOST = 256,
- OPT_ARG_LOCAL_HOST,
- OPT_ARG_REMOTE_HOST,
- OPT_ARG_PORT,
- OPT_ARG_LOCAL_PORT,
- OPT_ARG_REMOTE_PORT,
- OPT_ARG_MAC,
- OPT_ARG_LOCAL_MAC,
- OPT_ARG_REMOTE_MAC,
- OPT_ARG_INVALID
-};
-
-typedef struct _ip_head
-{
- u8 ihl:4;
- u8 version:4;
- u8 tos;
- u16 tot_len;
- u16 id;
- u16 frag_off;
- u8 ttl;
- u8 protocol;
- u16 chk_sum;
- u32 local_ip;
- u32 remote_ip;
-} ip_head;
-
-typedef struct _tcp_head
-{
- u16 src_port;
- u16 dst_port;
- u32 seq_no;
- u32 ack_no;
-} tcp_head;
-
-typedef struct _udp_head
-{
- u16 src_port;
- u16 dst_port;
- u16 uhl;
- u16 chk_sum;
-} udp_head;
-
-typedef struct _dump_file_head
-{
- u32 magic;
- u16 major_ver;
- u16 minor_ver;
- u32 area;
- u32 time_stamp;
- u32 max_pack_size;
- u32 link_type;
-} dump_file_head;
-
-typedef struct _packet_head
-{
- u32 sec;
- u32 usec;
- u32 save_len;
- u32 org_len;
-} packet_head;
-
-typedef struct _ip_addr_bits
-{
- u32 addr_bits1;
- u32 addr_bits2;
- u32 addr_bits3;
- u32 addr_bits4;
-} ip_addr_bits;
-
-typedef struct _parse_msg_info
-{
- u16 l2_protocol; // ARP/IP/OAM/LACP
- u16 l3_protocol; // TCP/UDP/ICMP
- u16 local_port;
- u16 remote_port;
- u32 local_ip;
- u32 remote_ip;
- char local_mac[MAC_ADDR_LEN + 1];
- char remote_mac[MAC_ADDR_LEN + 1];
-
- void *org_msg;
-} parse_msg_info;
-
-typedef struct _dump_condition
-{
- bool has_condition;
- u32 dump_count;
- u32 dump_time;
- u32 limit_len;
- u16 direction; //1:send 2:recv 3:send-recv
- u16 l2_protocol; // ARP/IP/OAM/LACP
- u16 l3_protocol; // TCP/UDP/ICMP
- u16 port_set_flag;
- u16 port;
- u16 local_port;
- u16 remote_port;
- u16 ip_set_flag;
- u32 ip_addr;
- u32 local_ip;
- u32 remote_ip;
- u16 mac_set_flag;
- char mac_addr[MAC_ADDR_LEN + 1];
- char local_mac[MAC_ADDR_LEN + 1];
- char remote_mac[MAC_ADDR_LEN + 1];
-
- char *dump_file_name;
-} dump_condition;
-
-typedef struct _icmp_head
-{
- u8 icmp_type;
- u8 icmp_code;
- u16 icmp_cksum;
- u16 icmp_id;
- u16 icmp_seq;
- u32 timestamp;
-
- long icmp_sec;
- long icmp_nsec;
-} icmp_head;
-
-typedef struct _ning_input_info
-{
- i32 send_count; // total send req
- i32 retry_count; // retry count for 1 req
- char src_ip[IP_ADDR_LEN];
- char dst_ip[IP_ADDR_LEN];
-} input_info;
-
-typedef struct _nping_stat_info
-{
- u32 send_seq;
- u32 recv_ok;
- double all_interval;
- double min_interval;
- double max_interval;
- struct timespec start_time;
- struct timespec end_time;
-} stat_info;
-
-#ifndef sys_sleep_ns
-#define sys_sleep_ns(_s, _ns)\
-{ \
- if (_s >= 0 && _ns >= 0) \
- { \
- struct timespec delay, remain; \
- delay.tv_sec = _s; \
- delay.tv_nsec = _ns; \
- while (nanosleep(&delay, &remain) < 0) \
- { \
- delay = remain; \
- } \
- } \
-}
-#endif
-
-#endif
diff --git a/stacks/lwip_stack/vagrant/Vagrantfile b/stacks/lwip_stack/vagrant/Vagrantfile
deleted file mode 100644
index b3a31c1..0000000
--- a/stacks/lwip_stack/vagrant/Vagrantfile
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-Vagrant.configure(2) do |config|
-
- # Pick the right distro and bootstrap, default is ubuntu1604
- distro = ( ENV['DMM_VAGRANT_DISTRO'] || "ubuntu")
- if distro == 'centos7'
- config.vm.box = "puppetlabs/centos-7.2-64-nocm"
- else
- config.vm.box = "puppetlabs/ubuntu-16.04-64-nocm"
- end
- config.vm.box_check_update = false
-
- # Create DMM client and server VM's
- config.vm.define "dmm-stackx-server" do |server|
- server.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"../../../scripts/install_prereq.sh")
- server.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"build.sh"), :args => "/DMM vagrant"
- server.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"start_nstackMain.sh"), :args => "/DMM vagrant"
- end
- config.vm.define "dmm-stackx-client" do |client|
- client.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"../../../scripts/install_prereq.sh")
- client.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"build.sh"), :args => "/DMM vagrant"
- client.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"start_nstackMain.sh"), :args => "/DMM vagrant"
- end
-
-
- # vagrant-cachier caches apt/yum etc to speed subsequent
- # vagrant up
- # to enable, run
- # vagrant plugin install vagrant-cachier
- #
- if Vagrant.has_plugin?("vagrant-cachier")
- config.cache.scope = :box
- end
-
- # Define some physical ports for your VMs to be used by DPDK
- nics = (ENV['DMM_VAGRANT_NICS'] || "2").to_i(10)
- for i in 1..nics
- config.vm.network "private_network", type: "dhcp"
- # config.vm.network "private_network", ip: "172.28.128.200"
- # config.vm.network "private_network", ip: "172.28.128.201"
- end
-
- # use http proxy if avaiable
- if ENV['http_proxy'] && Vagrant.has_plugin?("vagrant-proxyconf")
- config.proxy.http = ENV['http_proxy']
- config.proxy.https = ENV['https_proxy']
- config.proxy.no_proxy = "localhost,127.0.0.1"
- end
-
- vmcpu=(ENV['DMM_VAGRANT_VMCPU'] || 4)
- vmram=(ENV['DMM_VAGRANT_VMRAM'] || 5120)
-
- config.ssh.forward_agent = true
- config.ssh.forward_x11 = true
-
- config.vm.provider "virtualbox" do |vb|
- vb.customize ["modifyvm", :id, "--ioapic", "on"]
- vb.memory = "#{vmram}"
- vb.cpus = "#{vmcpu}"
-
- config.vm.synced_folder "../../../", "/DMM", type: "rsync"
- end
-end
diff --git a/stacks/lwip_stack/vagrant/build.sh b/stacks/lwip_stack/vagrant/build.sh
deleted file mode 100755
index a934eef..0000000
--- a/stacks/lwip_stack/vagrant/build.sh
+++ /dev/null
@@ -1,59 +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.
-#########################################################################
-#!/bin/bash -x
-
-set -x
-
-TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
-log_file="/tmp/build_log.txt-$TIMESTAMP"
-exec 1> >(tee -a "$log_file") 2>&1
-
-# Get Command Line arguements if present
-if [ "$1" == "from-base-build" ]; then
- WAS_DMM_BUILT="YES"
-fi
-
-if [ "x$1" != "x" ] && [ "$1" != "from-base-build" ]; then
- TEMP_DIR=$1
- DMM_BUILD_SCRIPT_DIR=${TEMP_DIR}/scripts
- LWIP_BUILD_DIR=${TEMP_DIR}/stacks/lwip_stack/build/
-else
- TEMP_DIR=`dirname $(readlink -f $0)`/..
- DMM_BUILD_SCRIPT_DIR=${TEMP_DIR}/../../scripts
- LWIP_BUILD_DIR=${TEMP_DIR}/build/
-fi
-
-echo 0:$0
-echo 1:$1
-echo 2:$2
-echo TEMP_DIR: $TEMP_DIR
-echo DMM_BUILD_SCRIPT_DIR: $DMM_BUILD_SCRIPT_DIR
-echo LWIP_BUILD_DIR: $LWIP_BUILD_DIR
-
-if [ 'x$WAS_DMM_BUILT' != "xYES" ]; then
- bash -x $DMM_BUILD_SCRIPT_DIR/build.sh
-fi
-
-#===========build LWIP===========
-echo "LWIP build started....."
-cd $LWIP_BUILD_DIR
-cmake ..
-make -j 8
-if [ $? -eq 0 ]; then
- echo "LWIP build is SUCCESS"
-else
- echo "LWIP build has FAILED"
- exit 1
-fi
diff --git a/stacks/lwip_stack/vagrant/env.sh b/stacks/lwip_stack/vagrant/env.sh
deleted file mode 100755
index 96ad346..0000000
--- a/stacks/lwip_stack/vagrant/env.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-#export DMM_VAGRANT_DISTRO="ubuntu1604"
-export DMM_VAGRANT_DISTRO="centos7"
-export DMM_VAGRANT_NICS=2
-export DMM_VAGRANT_VMCPU=4
-export DMM_VAGRANT_VMRAM=8192
diff --git a/stacks/lwip_stack/vagrant/start_nstackMain.sh b/stacks/lwip_stack/vagrant/start_nstackMain.sh
deleted file mode 100755
index fb25b6f..0000000
--- a/stacks/lwip_stack/vagrant/start_nstackMain.sh
+++ /dev/null
@@ -1,110 +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.
-#########################################################################
-#!/bin/bash -x
-
-set -x
-
-DPDK_DOWNLOAD_PATH=/tmp/dpdk
-ifname=enp0s8
-
-if [ "x$1" != "x" ] && [ "$1" != "from-base-build" ]; then
- TEMP_DIR=$1
- DMM_BUILD_SCRIPT_DIR=${TEMP_DIR}/scripts
- LWIP_BUILD_DIR=${TEMP_DIR}/stacks/lwip_stack/build/
-else
- TEMP_DIR=`dirname $(readlink -f $0)`/..
- DMM_BUILD_SCRIPT_DIR=${TEMP_DIR}/../../scripts
- LWIP_BUILD_DIR=${TEMP_DIR}/build/
-fi
-
-LIB_PATH=$LWIP_BUILD_DIR/../release/lib64/
-
-echo 0:$0
-echo 1:$1
-echo 2:$2
-echo TEMP_DIR: $TEMP_DIR
-echo DMM_BUILD_SCRIPT_DIR: $DMM_BUILD_SCRIPT_DIR
-echo LWIP_BUILD_DIR: $LWIP_BUILD_DIR
-echo LIB_PATH: $LIB_PATH
-
-#===========check hugepages=================
-source $DMM_BUILD_SCRIPT_DIR/check_hugepage.sh
-
-OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
-if [ "$OS_ID" == "centos" ]; then
- ifaddress1=$(ifconfig $ifname | grep 'inet' | cut -d: -f2 | awk '{print $2}')
- echo $ifaddress1
- ifaddresscut=$(ifconfig $ifname | grep 'inet' | head -n 1 | awk -F " " '{print $2}' | awk -F "." '{print $1"."$2"."$3}')
- echo $ifaddresscut
- ifmac=$(ifconfig $ifname | grep 'ether' | awk -F " " '{print $2}')
- echo $ifmac
-elif [ "$OS_ID" == "ubuntu" ]; then
- ifaddress1=$(ifconfig $ifname | grep 'inet' | head -n 1 | cut -d: -f2 | awk '{print $1}')
- echo $ifaddress1
- ifaddresscut=$(ifconfig $ifname | grep 'inet' | head -n 1 | cut -d: -f2 | awk '{print $1}' | awk -F "." '{print $1"."$2"."$3}')
- echo $ifaddresscut
- ifmac=$(ifconfig $ifname | grep 'HWaddr' | awk -F " " '{print $5}')
- echo $ifmac
-fi
-
-cd $LWIP_BUILD_DIR/../
-cd release/script
-sed -i 's!DPDK_INSTALL_PATH=.*!DPDK_INSTALL_PATH='$DPDK_DOWNLOAD_PATH'/dpdk-18.02!1' nstack_var.sh
-
-cd ../
-chmod 775 *
-cp ./configure/*.json bin/
-cd bin
-
-sed -i 's!192.168.1.207!'$ifaddress1'!1' ip_data.json
-
-sed -i 's!192.168.1.1!'$ifaddresscut'.0!1' network_data_tonStack.json
-
-if [ "$OS_ID" == "centos" ]; then
- sed -i 's!eth7!'$ifname'!1' network_data_tonStack.json
-elif [ "$OS_ID" == "ubuntu" ]; then
- sed -i 's!eth7!'$ifname'!1' network_data_tonStack.json
-fi
-sed -i 's!eth7!'$ifname'!1' network_data_tonStack.json
-
-cd $DMM_BUILD_SCRIPT_DIR/../release/bin
-cp -r . ../../stacks/lwip_stack/app_test
-cd $DMM_BUILD_SCRIPT_DIR/../stacks/lwip_stack/app_test
-cp -r ../configure/*.json .
-
-sed -i 's!192.168.1.1!'$ifaddresscut'.0!1' rd_config.json
-
-sudo mkdir -p /var/run/ip_module/
-sudo mkdir -p /var/log/nStack/ip_module/
-
-export LD_LIBRARY_PATH=$LIB_PATH
-if [ "$NSTACK_LOG_ON" = "PERF" ]
-then
- export NSTACK_LOG_ON=PERF
-else
- export NSTACK_LOG_ON=DBG
-fi
-
-cd $LWIP_BUILD_DIR/../release
-bash -x ./stop_nstack.sh
-bash -x ./start_nstack.sh
-check_result=$(pgrep nStackMain)
-if [ -z "$check_result" ]; then
- echo "nStackMain execute failed"
- exit 1
-else
- echo "nStackMain execute successful"
- exit 0
-fi
diff --git a/stacks/readme.txt b/stacks/readme.txt
new file mode 100644
index 0000000..9c32a95
--- /dev/null
+++ b/stacks/readme.txt
@@ -0,0 +1 @@
+1.´ËĿ¼ÓÃÓÚ·ÅЭÒéÕ»£¬Ã¿¸öЭÒéʹÓõ¥¶ÀÒ»¸öĿ¼ \ No newline at end of file
diff --git a/stacks/rsocket/CMakeLists.txt b/stacks/rsocket/CMakeLists.txt
index 6ba868b..6516961 100644
--- a/stacks/rsocket/CMakeLists.txt
+++ b/stacks/rsocket/CMakeLists.txt
@@ -13,40 +13,62 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#########################################################################
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
+#PROJECT(nStack)
+SET(CMAKE_SKIP_RPATH TRUE)
+SET(CMAKE_C_COMPILER "gcc")
+SET(OS_RELEASE "" CACHE STRING "User-specified OS release.")
+SET(EXECUTABLE_PATH ${CMAKE_CURRENT_LIST_DIR}/../../release/bin)
+SET(LIB_PATH_STATIC ${CMAKE_SOURCE_DIR}/build)
+SET(LIB_PATH_SHARED ${CMAKE_CURRENT_LIST_DIR}/../../release/lib64)
+SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_PATH_STATIC})
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_PATH})
+SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_PATH_SHARED})
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIE -pie -fPIC -m64 -mssse3 -std=gnu89")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wshadow -Wfloat-equal -Wformat=2")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector -fstack-protector-all")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,relro,-z,now -Wl,--disable-new-dtags")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium")
SET(rdmacm_dir librdmacm-1.1.0)
-SET(dmm_inc_dir ${DMM_REL_INC_DIR})
+SET(dmm_inc_dir ${CMAKE_CURRENT_LIST_DIR}/../../release/include/)
+SET(DMM_REL_INC_DIR ${dmm_inc_dir})
+SET(dmm_src_inc_dir ${CMAKE_SOURCE_DIR}/src/include/)
SET(RSOCKET_DEBUG 1)
########################
-
SET(rdmacm_url https://github.com/ofiwg/librdmacm/archive/v1.1.0.tar.gz)
-
+if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/v1.1.0.tar.gz")
+ SET(RDMA_DOWNLOAD_CMD tar -xvf ${CMAKE_CURRENT_LIST_DIR}/v1.1.0.tar.gz)
+else()
+ SET(RDMA_DOWNLOAD_CMD wget --no-check-certificate ${rdmacm_url} && tar -xvf ${CMAKE_CURRENT_LIST_DIR}/v1.1.0.tar.gz)
+endif()
INCLUDE(ExternalProject)
ExternalProject_Add(
rdmacm
- URL ${rdmacm_url}
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/${rdmacm_dir}
DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}
+ DOWNLOAD_COMMAND ${RDMA_DOWNLOAD_CMD}
PATCH_COMMAND patch -p1 -i ../rsocket.patch
CONFIGURE_COMMAND ./autogen.sh && ./configure dmm_inc_dir=${DMM_REL_INC_DIR} RSOCKET_DEBUG=${RSOCKET_DEBUG}
BUILD_IN_SOURCE 1
BUILD_COMMAND make
INSTALL_COMMAND cp -f libdmm_rdmacm.a ${LIB_PATH_STATIC}/
- DEPENDS DPDK
)
-set_target_properties(rdmacm PROPERTIES EXCLUDE_FROM_ALL TRUE)
########################
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIC -m64 -pthread")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIC -m64 -pthread")
ADD_LIBRARY(dmm_rsocket SHARED src/rsocket_adpt.c)
ADD_DEFINITIONS(-D_GNU_SOURCE -DRSOCKET_DEBUG=${RSOCKET_DEBUG})
-INCLUDE_DIRECTORIES(${DMM_REL_INC_DIR})
+INCLUDE_DIRECTORIES(
+ ${DMM_REL_INC_DIR} ${dmm_src_inc_dir}
+)
INCLUDE_DIRECTORIES(./src ${rdmacm_dir} ${rdmacm_dir}/include ${rdmacm_dir}/src)
TARGET_LINK_LIBRARIES(dmm_rsocket
@@ -56,6 +78,4 @@ TARGET_LINK_LIBRARIES(dmm_rsocket
ibverbs pthread dl rt
)
-ADD_DEPENDENCIES(dmm_rsocket rdmacm DPDK)
-
-set_target_properties(dmm_rsocket PROPERTIES EXCLUDE_FROM_ALL TRUE)
+ADD_DEPENDENCIES(dmm_rsocket rdmacm)
diff --git a/stacks/lwip_stack/build/.gitkeep b/stacks/rsocket/build/.gitkeep
index e69de29..e69de29 100644
--- a/stacks/lwip_stack/build/.gitkeep
+++ b/stacks/rsocket/build/.gitkeep
diff --git a/stacks/rsocket/configure/module_config.json b/stacks/rsocket/configure/module_config.json
index 736de24..2df82cd 100644
--- a/stacks/rsocket/configure/module_config.json
+++ b/stacks/rsocket/configure/module_config.json
@@ -3,17 +3,27 @@
"module_list": [
{
"stack_name": "kernel", /*stack name*/
+ "function_name": "kernel_stack_register", /*function name*/
"libname": "./", /*library name, if loadtype is static, this maybe
null, else must give a library name*/
+ "loadtype": "static", /*library load type: static or dynamic*/
"deploytype": "1", /*deploy model type:model type1, model type2,
model type3. Indicating single or multi process
deployment. Used during shared memory initialization.*/
+ "maxfd": "1024", /*the max fd supported*/
+ "minfd": "0", /*the min fd supported*/
+ "priorty": "1", /*priorty when executing, reserv*/
"stackid": "0", /*stack id, this must be ordered and not be repeated*/
},
{
"stack_name": "rsocket",
+ "function_name": "rsocket_stack_register",
"libname": "libdmm_rsocket.so",
+ "loadtype": "dynmic",
"deploytype": "1",
+ "maxfd": "1024",
+ "minfd": "0",
+ "priorty": "1",
"stackid": "1",
},
]
diff --git a/stacks/rsocket/configure/rd_config.json b/stacks/rsocket/configure/rd_config.json
index 5c6f861..d89afcf 100644
--- a/stacks/rsocket/configure/rd_config.json
+++ b/stacks/rsocket/configure/rd_config.json
@@ -1,10 +1,25 @@
{
- "ip_route": [
- {
- "subnet": "192.168.1.1/24",
- "stack_name": "rsocket",
- },
- ],
- "prot_route": [
- ],
+ "modules": [
+ {
+ "name": "kernel",
+ "ip_route": [
+ "127.0.0.1/24"
+ ],
+ "protocol_route": [
+ ],
+ "type_route": [
+ ]
+ },
+ {
+ "name": "rsocket",
+ "ip_route": [
+ "192.168.21.1/24"
+
+ ],
+ "protocol_route": [
+ ],
+ "type_route": [
+ ]
+ }
+ ]
}
diff --git a/stacks/rsocket/doc/README.md b/stacks/rsocket/doc/README.md
index 6cdacfb..237db68 100644
--- a/stacks/rsocket/doc/README.md
+++ b/stacks/rsocket/doc/README.md
@@ -34,10 +34,10 @@ dmm/release/lib64/libdmm_rsocket.so
```sh
#export LD_LIBRARY_PATH=${dmm}/release/lib64
#export LD_PRELOAD=${dmm}/release/lib64/libnStackAPI.so
- #export NSTACK_MOD_CFG_FILE=${dmm}/stacks/rsocket/configure/module_config.json
- #export NSTACK_MOD_CFG_RD=${dmm}/stacks/rsocket/configure/rd_config.json
+ #export NSTACK_MOD_CFG_FILE=${dmm}/stacks/rsocket/config/module_config.json
+ #export NSTACK_MOD_CFG_RD=${dmm}/stacks/rsocket/config/rd_config.json
```
-- Steps 2: Modify rd_config.json(located at dmm/stacks/rsocket/configure/)
+- Steps 2: Modify rd_config.json(located at dmm/stacks/rsocket/config/)
```sh
#vim rd_config.json
//set "subnet": "192.168.21.1/24"
@@ -107,4 +107,4 @@ all using GSAPI macro control.
https://wiki.fd.io/view/DMM
https://github.com/ofiwg/librdmacm/blob/master/docs/rsocket
https://github.com/rsocket/rsocket
-http://www.mellanox.com/page/products_dyn?product_family=26
+http://www.mellanox.com/page/products_dyn?product_family=26 \ No newline at end of file
diff --git a/stacks/rsocket/src/rsocket_adpt.c b/stacks/rsocket/src/rsocket_adpt.c
index 2839909..9496e96 100644
--- a/stacks/rsocket/src/rsocket_adpt.c
+++ b/stacks/rsocket/src/rsocket_adpt.c
@@ -19,10 +19,11 @@
#include <errno.h>
#include <dlfcn.h>
-#include "nstack_dmm_api.h"
-
+#include "nstack_callback_ops.h"
#include "rsocket_adpt.h"
#include "rdma/rsocket.h"
+#include "nstack_epoll_api.h"
+#include "nstack_rd_api.h"
#define RR_EVFD(u64) ((int)((u64) >> 32))
#define RR_RSFD(u64) ((int)((u64) & 0xFFFFFFFF))
@@ -36,77 +37,69 @@ rr_sapi_t g_sapi = { 0 };
int g_rr_log_level = -1;
-int
-rr_notify_event (void *pdata, int events)
-{
- int ret;
-
- ret = g_rr_var.event_cb (pdata, events);
-
- RR_DBG ("event_cb(%p, 0x%x)=%d,%d\n", pdata, events, ret, errno);
+void *rrd_table = NULL;
- return ret;
+void rr_notify_event(void *pdata, int events)
+{
+ g_rr_var.event_cb(pdata, events, EVENT_INFORM_APP);
}
-int
-rr_epoll_ctl (int op, int evfd, uint32_t events, int rsfd)
+int rr_epoll_ctl(int op, int evfd, uint32_t events, int rsfd)
{
- int ret;
- struct epoll_event event;
- event.events = events;
- event.data.u64 = RR_DATA (evfd, rsfd);
- ret = GSAPI (epoll_ctl) (g_rr_var.epfd, op, evfd, &event);
- return ret;
+ int ret;
+ struct epoll_event event;
+ event.events = events;
+ event.data.u64 = RR_DATA(evfd, rsfd);
+ ret = GSAPI(epoll_ctl) (g_rr_var.epfd, op, evfd, &event);
+ return ret;
}
-static void *
-rr_epoll_thread (void *arg)
+static void *rr_epoll_thread(void *arg)
{
- int i, ret, e;
- struct epoll_event events[RR_EV_NUM];
+ int i, ret, e;
+ struct epoll_event events[RR_EV_NUM];
- while (1)
+ while (1)
{
- ret = GSAPI (epoll_wait) (g_rr_var.epfd, events, RR_EV_NUM, 100);
- e = errno;
+ ret = GSAPI(epoll_wait) (g_rr_var.epfd, events, RR_EV_NUM, 100);
+ e = errno;
- for (i = 0; i < ret; ++i)
+ for (i = 0; i < ret; ++i)
{
- if (rr_rs_handle (RR_RSFD (events[i].data.u64), events[i].events))
+ if (rr_rs_handle(RR_RSFD(events[i].data.u64), events[i].events))
{
- (void) rr_ep_del (RR_EVFD (events[i].data.u64));
+ (void) rr_ep_del(RR_EVFD(events[i].data.u64));
}
}
- if (ret < 0)
+ if (ret < 0)
{
- RR_STAT_INC (RR_STAT_EPW_ERR);
- if (e == EINTR)
+ RR_STAT_INC(RR_STAT_EPW_ERR);
+ if (e == EINTR)
{
- RR_STAT_INC (RR_STAT_EPW_EINTR);
+ RR_STAT_INC(RR_STAT_EPW_EINTR);
}
- else if (e == ETIMEDOUT)
+ else if (e == ETIMEDOUT)
{
- RR_STAT_INC (RR_STAT_EPW_ETIMEOUT);
+ RR_STAT_INC(RR_STAT_EPW_ETIMEOUT);
}
- else
+ else
{
- RR_ERR ("epoll_wait()=%d:%d\n", ret, errno);
+ RR_ERR("epoll_wait()=%d:%d\n", ret, errno);
}
}
}
- return NULL;
+ return NULL;
}
-static int
-rr_init_sapi ()
+static int rr_init_sapi()
{
- void *handle = dlopen ("libc.so.6", RTLD_NOW | RTLD_GLOBAL);
- if (!handle)
+ void *handle = dlopen("libc.so.6", RTLD_NOW | RTLD_GLOBAL);
+ if (!handle)
{
- RR_ERR ("dlopen(libc.so.6):NULL\n");
- return -1;
+ RR_ERR("dlopen(libc.so.6):NULL\n");
+ return -1;
}
#define RR_SAPI(name) \
@@ -116,129 +109,148 @@ rr_init_sapi ()
#include "rsocket_sapi.h"
#undef RR_SAPI
- return 0;
+ return 0;
}
-static void
-rr_init_log ()
+static void rr_init_log()
{
- int level;
- char *log;
+ int level;
+ char *log;
- if (g_rr_log_level >= 0)
- return;
+ if (g_rr_log_level >= 0)
+ return;
- log = getenv ("RSOCKET_LOG");
- if (!log || !log[0])
+ log = getenv("RSOCKET_LOG");
+ if (!log || !log[0])
{
- g_rr_log_level = RR_LOG_OFF;
- return;
+ g_rr_log_level = RR_LOG_OFF;
+ return;
}
- level = atoi (log);
- if (level < 0 || level > 99999)
+ level = atoi(log);
+ if (level < 0 || level > 99999)
{
- g_rr_log_level = RR_LOG_OFF;
- return;
+ g_rr_log_level = RR_LOG_OFF;
+ return;
}
- g_rr_log_level = level;
+ g_rr_log_level = level;
}
-static int
-rsocket_init ()
+void *rsocket_get_ip_shmem()
{
- int ret;
+ return rrd_table;
+}
- rr_init_log ();
+static int rsocket_init()
+{
+ int ret;
+ rrd_table = nstack_local_rd_malloc();
+ if (!rrd_table)
+ {
+ RR_ERR("rsocket rd table create failed!");
+ return -1;
+ }
- if (rr_init_sapi ())
+ if (nstack_rd_parse("rsocket", rrd_table))
{
- return -1;
+ RR_WRN("no rd data got!");
+ RR_WRN("rsocket parse rd data failed");
+ nstack_rd_table_clear(rrd_table);
+ return -1;
}
- g_rr_var.epfd = GSAPI (epoll_create) (1);
- if (g_rr_var.epfd < 0)
- return g_rr_var.epfd;
+ rr_init_log();
- ret =
- pthread_create (&g_rr_var.epoll_threadid, NULL, rr_epoll_thread, NULL);
- if (ret)
+ if (rr_init_sapi())
{
- GSAPI (close) (g_rr_var.epfd);
- g_rr_var.epfd = -1;
- return ret;
+ return -1;
}
- (void) pthread_setname_np (g_rr_var.epoll_threadid, "rsocket_epoll");
- return 0;
-}
+ g_rr_var.epfd = GSAPI(epoll_create) (1);
-int
-rsocket_exit ()
-{
- if (g_rr_var.epfd >= 0)
+ if (g_rr_var.epfd < 0)
{
- (void) GSAPI (close) (g_rr_var.epfd);
- g_rr_var.epfd = -1;
+ return g_rr_var.epfd;
}
- return 0;
+ ret =
+ pthread_create(&g_rr_var.epoll_threadid, NULL, rr_epoll_thread, NULL);
+ if (ret)
+ {
+ GSAPI(close) (g_rr_var.epfd);
+ g_rr_var.epfd = -1;
+ return ret;
+ }
+ (void) pthread_setname_np(g_rr_var.epoll_threadid, "rsocket_epoll");
+
+ return 0;
}
-unsigned int
-rsocket_ep_ctl (int epFD, int proFD, int ctl_ops, struct epoll_event *event,
- void *pdata)
+int rsocket_exit()
{
- int ret;
- struct eventpoll *ep;
- unsigned int revents = 0;
+ if (g_rr_var.epfd >= 0)
+ {
+ (void) GSAPI(close) (g_rr_var.epfd);
+ g_rr_var.epfd = -1;
+ }
- RR_DBG ("(%d, %d, %d, 0x%x, %p)\n", epFD, proFD, ctl_ops, event->events,
- pdata);
+ return 0;
+}
- switch (ctl_ops)
+void *rsocket_ep_ctl(int proFD, int ctl_ops, void *pdata, void *event)
+{
+ int ret;
+ unsigned int revents = 0;
+ switch (ctl_ops)
{
- case nstack_ep_triggle_add:
- ret = rr_rs_ep_add (proFD, pdata, &revents);
- if (ret)
- return -1;
- return revents;
-
- case nstack_ep_triggle_mod:
- ret = rr_rs_ep_mod (proFD, pdata, &revents);
- if (ret)
- return -1;
- return revents;
- case nstack_ep_triggle_del:
- return rr_rs_ep_del (proFD);
+ case nstack_ep_triggle_add:
+ ret = rr_rs_ep_add(proFD, pdata, &revents);
+ if (ret)
+ return NULL;
+ *(int *) event = revents;
+ return pdata;
+ case nstack_ep_triggle_mod:
+ ret = rr_rs_ep_mod(proFD, pdata, &revents);
+ if (ret)
+ return NULL;
+ *(int *) event = revents;
+ return pdata;
+ case nstack_ep_triggle_del:
+ rr_rs_ep_del(proFD);
}
- return _err (EPERM);
+ return pdata;
+
}
-int
-rsocket_stack_register (nstack_proc_cb * proc_fun,
- nstack_event_cb * event_ops)
+int rsocket_getEvt(int fd)
{
- rr_init_log ();
+ return rr_getEvt(fd);
+}
+
+int rsocket_stack_register(nstack_socket_ops * ops,
+ nstack_event_ops * event_ops,
+ nstack_proc_ops * proc_fun)
+{
+ rr_init_log();
#define NSTACK_MK_DECL(ret, fn, args) \
do { \
- proc_fun->socket_ops.pf##fn = dlsym(event_ops->handle, "r"#fn); \
- if (!proc_fun->socket_ops.pf##fn) \
+ ops->pf##fn = dlsym(event_ops->handle, "r"#fn); \
+ if (!ops->pf##fn) \
RR_LOG("socket API '" #fn "' not found\n"); \
} while (0)
-#include "declare_syscalls.h"
+#include "declare_syscalls.h.tmpl"
#undef NSTACK_MK_DECL
- proc_fun->extern_ops.module_init = rsocket_init;
- proc_fun->extern_ops.ep_ctl = rsocket_ep_ctl;
- proc_fun->extern_ops.ep_getevt = NULL;
- proc_fun->extern_ops.module_init_child = rsocket_init;
-
- g_rr_var.type = event_ops->type;
- g_rr_var.event_cb = event_ops->event_cb;
+ proc_fun->module_init = rsocket_init;
+ proc_fun->ep_triggle = rsocket_ep_ctl;
+ proc_fun->ep_getEvt = rsocket_getEvt;
+ proc_fun->get_ip_shmem = rsocket_get_ip_shmem;
+ proc_fun->fork_init_child = rsocket_init;
+ g_rr_var.type = event_ops->type;
+ g_rr_var.event_cb = event_ops->event_cb;
- return 0;
+ return 0;
}
diff --git a/stacks/rsocket/src/rsocket_adpt.h b/stacks/rsocket/src/rsocket_adpt.h
index 9c53330..37a2e88 100644
--- a/stacks/rsocket/src/rsocket_adpt.h
+++ b/stacks/rsocket/src/rsocket_adpt.h
@@ -22,11 +22,11 @@
enum
{
- RR_STAT_EPW_ERR,
- RR_STAT_EPW_EINTR,
- RR_STAT_EPW_ETIMEOUT,
+ RR_STAT_EPW_ERR,
+ RR_STAT_EPW_EINTR,
+ RR_STAT_EPW_ETIMEOUT,
- RR_STAT_NUM
+ RR_STAT_NUM
};
#define RR_STAT_ADD(id, num) __sync_add_and_fetch(&g_rr_var.stat[(id)], num)
@@ -38,17 +38,16 @@ enum
typedef struct rsocket_var
{
- pthread_t epoll_threadid;
+ pthread_t epoll_threadid;
- int epfd;
- int type;
- int (*event_cb) (void *pdata, int events);
+ int epfd;
+ int type;
+ void (*event_cb) (void *pdata, int events, int postFlag);
- uint64_t stat[RR_STAT_NUM];
+ uint64_t stat[RR_STAT_NUM];
} rsocket_var_t;
extern rsocket_var_t g_rr_var;
-
-int rr_rs_handle (int fd, uint32_t events);
-
+int rsocket_getEvt(int fd);
+int rr_rs_handle(int fd, uint32_t events);
#endif /* #ifndef _RSOCKET_ADPT_H_ */
diff --git a/stacks/rsocket/src/rsocket_rdma.h b/stacks/rsocket/src/rsocket_rdma.h
index 75f4268..af66285 100644
--- a/stacks/rsocket/src/rsocket_rdma.h
+++ b/stacks/rsocket/src/rsocket_rdma.h
@@ -31,11 +31,11 @@
enum
{
- RR_LOG_OFF = 0x00,
- RR_LOG_ERR = 0x01,
- RR_LOG_WRN = 0x02,
- RR_LOG_LOG = 0x03,
- RR_LOG_DBG = 0x04,
+ RR_LOG_OFF = 0x00,
+ RR_LOG_ERR = 0x01,
+ RR_LOG_WRN = 0x02,
+ RR_LOG_LOG = 0x03,
+ RR_LOG_DBG = 0x04,
};
#define RR_OUT(level, name, fmt, arg...) do { \
@@ -57,13 +57,13 @@ enum
#define _err(err_no) ((errno = (err_no)), -1)
-int rr_rs_ep_add (int fd, void *pdata, uint32_t * revent);
-int rr_rs_ep_mod (int fd, void *pdata, uint32_t * revent);
-int rr_rs_ep_del (int fd);
+int rr_rs_ep_add(int fd, void *pdata, uint32_t * revent);
+int rr_rs_ep_mod(int fd, void *pdata, uint32_t * revent);
+int rr_rs_ep_del(int fd);
-uint32_t rr_rs_poll (int fd, uint32_t revents);
-
-int rr_notify_event (void *pdata, int events);
+uint32_t rr_rs_poll(int fd, uint32_t revents);
+int rr_getEvt(int fd);
+void rr_notify_event(void *pdata, int events);
typedef struct rr_socket_api
{
@@ -76,21 +76,19 @@ extern rr_sapi_t g_sapi;
#define GSAPI(name) g_sapi.n_##name
-int rr_epoll_ctl (int op, int evfd, uint32_t events, int rsfd);
+int rr_epoll_ctl(int op, int evfd, uint32_t events, int rsfd);
-inline static int
-rr_ep_add (int evfd, int rsfd)
+inline static int rr_ep_add(int evfd, int rsfd)
{
- return rr_epoll_ctl (EPOLL_CTL_ADD, evfd, EPOLLET | EPOLLIN | EPOLLOUT,
- rsfd);
+ return rr_epoll_ctl(EPOLL_CTL_ADD, evfd, EPOLLET | EPOLLIN | EPOLLOUT,
+ rsfd);
}
-inline static int
-rr_ep_del (int evfd)
+inline static int rr_ep_del(int evfd)
{
- if (evfd < 0)
- return 0;
- return rr_epoll_ctl (EPOLL_CTL_DEL, evfd, 0, 0);
+ if (evfd < 0)
+ return 0;
+ return rr_epoll_ctl(EPOLL_CTL_DEL, evfd, 0, 0);
}
#endif /* #ifndef _RSOCKET_RDMA_H_ */
diff --git a/stacks/rsocket/src/rsocket_rs.c b/stacks/rsocket/src/rsocket_rs.c
index 0f4e73f..79c4914 100644
--- a/stacks/rsocket/src/rsocket_rs.c
+++ b/stacks/rsocket/src/rsocket_rs.c
@@ -17,221 +17,222 @@
#ifndef _RSOCKET_RS_C_
#define _RSOCKET_RS_C_
-inline static void
-rr_rs_init (struct rsocket *rs)
+inline static void rr_rs_init(struct rsocket *rs)
{
- RR_DBG ("(rs:%p{index:%d})\n", rs, rs->index);
- rs->rr_epoll_ref = 0;
- rs->rr_epoll_fd = -1;
- rs->rr_epoll_pdata = NULL;
+ RR_DBG("(rs:%p{index:%d})\n", rs, rs->index);
+ rs->rr_epoll_ref = 0;
+ rs->rr_epoll_fd = -1;
+ rs->rr_epoll_pdata = NULL;
}
-inline static void
-rr_rs_dest (struct rsocket *rs)
+inline static void rr_rs_dest(struct rsocket *rs)
{
- RR_DBG ("(rs:%p{index:%d})\n", rs, rs->index);
+ RR_DBG("(rs:%p{index:%d})\n", rs, rs->index);
- if (rs->rr_epoll_ref)
+ if (rs->rr_epoll_ref)
{
- (void) rr_ep_del (rs->rr_epoll_fd);
- rs->rr_epoll_ref = 0;
- rs->rr_epoll_fd = -1;
- rs->rr_epoll_pdata = NULL;
+ (void) rr_ep_del(rs->rr_epoll_fd);
+ rs->rr_epoll_ref = 0;
+ rs->rr_epoll_fd = -1;
+ rs->rr_epoll_pdata = NULL;
}
}
#ifndef POLL__RSOCKET_RS_H_
#define POLL__RSOCKET_RS_H_
-static inline uint32_t
-rr_rs_poll_tcp (struct rsocket *rs)
+static inline uint32_t rr_rs_poll_tcp(struct rsocket *rs)
{
- uint32_t events = 0;
- if (rs->state & rs_connected)
+ uint32_t events = 0;
+ if (rs->state & rs_connected)
{
- if (rs_have_rdata (rs))
- events |= EPOLLIN;
- if (rs_can_send (rs))
- events |= EPOLLOUT;
+ if (rs_have_rdata(rs))
+ events |= EPOLLIN;
+ if (rs_can_send(rs))
+ events |= EPOLLOUT;
}
- if (rs->state & (rs_error | rs_connect_error))
- events |= EPOLLERR;
- if (rs->state & rs_disconnected)
- events |= EPOLLHUP;
- return events;
+ if (rs->state & (rs_error | rs_connect_error))
+ events |= EPOLLERR;
+ if (rs->state & rs_disconnected)
+ events |= EPOLLHUP;
+ return events;
}
-static inline uint32_t
-rr_rs_poll_udp (struct rsocket *rs)
+static inline uint32_t rr_rs_poll_udp(struct rsocket *rs)
{
- uint32_t events = 0;
- if (rs_have_rdata (rs))
- events |= EPOLLIN;
- if (ds_can_send (rs))
- events |= EPOLLOUT;
- if (rs->state & rs_error)
- events |= EPOLLERR;
- return events;
+ uint32_t events = 0;
+ if (rs_have_rdata(rs))
+ events |= EPOLLIN;
+ if (ds_can_send(rs))
+ events |= EPOLLOUT;
+ if (rs->state & rs_error)
+ events |= EPOLLERR;
+ return events;
}
-static inline uint32_t
-rr_rs_poll_both (struct rsocket *rs)
+static inline uint32_t rr_rs_poll_both(struct rsocket *rs)
{
- if (rs->type == SOCK_STREAM)
- return rr_rs_poll_tcp (rs);
+ if (rs->type == SOCK_STREAM)
+ return rr_rs_poll_tcp(rs);
- if (rs->type == SOCK_DGRAM)
- return rr_rs_poll_udp (rs);
+ if (rs->type == SOCK_DGRAM)
+ return rr_rs_poll_udp(rs);
- return 0;
+ return 0;
}
-uint32_t
-rr_rs_poll (int fd, uint32_t revents)
+uint32_t rr_rs_poll(int fd, uint32_t revents)
{
- struct rsocket *rs = (struct rsocket *) idm_lookup (&idm, fd);
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
- if (!rs)
- return 0;
+ if (!rs)
+ return 0;
- if (rs->state == rs_listening)
- return revents;
+ if (rs->state == rs_listening)
+ return revents;
- return rr_rs_poll_both (rs);
+ return rr_rs_poll_both(rs);
}
+int rr_getEvt(int fd)
+{
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
+ if (rs->state == rs_listening)
+ {
+ return EPOLLIN;
+ }
+ if (!rs)
+ {
+ return 0;
+ }
+ return rr_rs_poll_both(rs);
+}
#endif /* #ifndef POLL__RSOCKET_RS_H_ */
-static inline void
-rr_rs_notify_tcp (struct rsocket *rs)
+static inline void rr_rs_notify_tcp(struct rsocket *rs)
{
- if (rs->rr_epoll_ref)
+ if (rs->rr_epoll_ref)
{
- uint32_t events = rr_rs_poll_tcp (rs);
- if (events)
- (void) rr_notify_event (rs->rr_epoll_pdata, events);
+ uint32_t events = rr_rs_poll_tcp(rs);
+ if (events)
+ (void) rr_notify_event(rs->rr_epoll_pdata, events);
}
}
-static inline void
-rr_rs_notify_udp (struct rsocket *rs)
+static inline void rr_rs_notify_udp(struct rsocket *rs)
{
- if (rs->rr_epoll_ref)
+ if (rs->rr_epoll_ref)
{
- uint32_t events = rr_rs_poll_udp (rs);
- if (events)
- (void) rr_notify_event (rs->rr_epoll_pdata, events);
+ uint32_t events = rr_rs_poll_udp(rs);
+ if (events)
+ (void) rr_notify_event(rs->rr_epoll_pdata, events);
}
}
#ifndef HANDLE__RSOCKET_RS_H_
#define HANDLE__RSOCKET_RS_H_
-inline static void
-rr_rs_handle_tcp (struct rsocket *rs)
+inline static void rr_rs_handle_tcp(struct rsocket *rs)
{
- int ret;
+ int ret;
- RR_DBG ("(%d)@ state:0x%x\n", rs->index, rs->state);
+ RR_DBG("(%d)@ state:0x%x\n", rs->index, rs->state);
- if (!(rs->state & (rs_connected | rs_opening)))
- return;
+ if (!(rs->state & (rs_connected | rs_opening)))
+ return;
- fastlock_acquire (&rs->cq_wait_lock);
- ret = rs_get_cq_event (rs);
- RR_DBG ("rs_get_cq_event({%d})=%d,%d\n", rs->index, ret, errno);
- fastlock_release (&rs->cq_wait_lock);
+ fastlock_acquire(&rs->cq_wait_lock);
+ ret = rs_get_cq_event(rs);
+ RR_DBG("rs_get_cq_event({%d})=%d,%d\n", rs->index, ret, errno);
+ fastlock_release(&rs->cq_wait_lock);
- fastlock_acquire (&rs->cq_lock);
+ fastlock_acquire(&rs->cq_lock);
- if (rs->state & rs_connected)
+ if (rs->state & rs_connected)
{
- rs_update_credits (rs);
- ret = rs_poll_cq (rs);
- RR_DBG ("rs_poll_cq({%d})=%d,%d {ref:%d, armed:%d}\n",
- rs->index, ret, errno, rs->rr_epoll_ref, rs->cq_armed);
+ rs_update_credits(rs);
+ ret = rs_poll_cq(rs);
+ RR_DBG("rs_poll_cq({%d})=%d,%d {ref:%d, armed:%d}\n",
+ rs->index, ret, errno, rs->rr_epoll_ref, rs->cq_armed);
}
- if (rs->rr_epoll_ref && rs->cq_armed < 1)
+ if (rs->rr_epoll_ref && rs->cq_armed < 1)
{
- ret = ibv_req_notify_cq (rs->cm_id->recv_cq, 0);
- RR_DBG ("ibv_req_notify_cq({%d})=%d,%d\n", rs->index, ret, errno);
- if (0 == ret)
- __sync_fetch_and_add (&rs->cq_armed, 1);
+ ret = ibv_req_notify_cq(rs->cm_id->recv_cq, 0);
+ RR_DBG("ibv_req_notify_cq({%d})=%d,%d\n", rs->index, ret, errno);
+ if (0 == ret)
+ __sync_fetch_and_add(&rs->cq_armed, 1);
}
- if (rs->state & rs_connected)
+ if (rs->state & rs_connected)
{
- ret = rs_poll_cq (rs);
- RR_DBG ("rs_poll_cq({%d})=%d,%d\n", rs->index, ret, errno);
- rs_update_credits (rs);
+ ret = rs_poll_cq(rs);
+ RR_DBG("rs_poll_cq({%d})=%d,%d\n", rs->index, ret, errno);
+ rs_update_credits(rs);
}
- fastlock_release (&rs->cq_lock);
+ fastlock_release(&rs->cq_lock);
- RR_DBG ("(%d)=\n", rs->index);
+ RR_DBG("(%d)=\n", rs->index);
}
-inline static void
-rr_rs_handle_udp (struct rsocket *rs)
+inline static void rr_rs_handle_udp(struct rsocket *rs)
{
- fastlock_acquire (&rs->cq_wait_lock);
- ds_get_cq_event (rs);
- fastlock_release (&rs->cq_wait_lock);
+ fastlock_acquire(&rs->cq_wait_lock);
+ ds_get_cq_event(rs);
+ fastlock_release(&rs->cq_wait_lock);
- fastlock_acquire (&rs->cq_lock);
- ds_poll_cqs (rs);
- if (rs->rr_epoll_ref && !rs->cq_armed)
+ fastlock_acquire(&rs->cq_lock);
+ ds_poll_cqs(rs);
+ if (rs->rr_epoll_ref && !rs->cq_armed)
{
- ds_req_notify_cqs (rs);
- rs->cq_armed = 1;
+ ds_req_notify_cqs(rs);
+ rs->cq_armed = 1;
}
- fastlock_release (&rs->cq_lock);
+ fastlock_release(&rs->cq_lock);
}
-inline static void
-rr_rs_handle_rs (struct rsocket *rs)
+inline static void rr_rs_handle_rs(struct rsocket *rs)
{
- if (rs->state & rs_opening)
+ if (rs->state & rs_opening)
{
- int ret = rs_do_connect (rs);
- RR_DBG ("rs_do_connect(%p{%d}):%d:%d\n", rs, rs->index, ret, errno);
- return;
+ int ret = rs_do_connect(rs);
+ RR_DBG("rs_do_connect(%p{%d}):%d:%d\n", rs, rs->index, ret, errno);
+ return;
}
- if (rs->type == SOCK_STREAM)
+ if (rs->type == SOCK_STREAM)
{
- rr_rs_handle_tcp (rs);
+ rr_rs_handle_tcp(rs);
}
- if (rs->type == SOCK_DGRAM)
+ if (rs->type == SOCK_DGRAM)
{
- rr_rs_handle_udp (rs);
+ rr_rs_handle_udp(rs);
}
}
-int
-rr_rs_handle (int fd, uint32_t events)
+int rr_rs_handle(int fd, uint32_t events)
{
- struct rsocket *rs = (struct rsocket *) idm_lookup (&idm, fd);
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
- RR_DBG ("(fd:%d, events:0x%x):rs:%p\n", fd, events, rs);
+ RR_DBG("(fd:%d, events:0x%x):rs:%p\n", fd, events, rs);
- if (!rs)
- return _err (EBADF);
+ if (!rs)
+ return _err(EBADF);
- if (rs->state == rs_listening)
+ if (rs->state == rs_listening)
{
- if (events & EPOLLIN)
+ if (events & EPOLLIN)
{
- (void) rr_notify_event (rs->rr_epoll_pdata, events);
+ (void) rr_notify_event(rs->rr_epoll_pdata, events);
}
- return 0;
+ return 0;
}
- rr_rs_handle_rs (rs);
+ rr_rs_handle_rs(rs);
- return 0;
+ return 0;
}
#endif /* #ifndef HANDLE__RSOCKET_RS_H_ */
@@ -239,155 +240,150 @@ rr_rs_handle (int fd, uint32_t events)
#ifndef ADPT__RSOCKET_RS_H_
#define ADPT__RSOCKET_RS_H_
-inline static int
-rr_rs_evfd (struct rsocket *rs)
+inline static int rr_rs_evfd(struct rsocket *rs)
{
- if (rs->type == SOCK_STREAM)
+ if (rs->type == SOCK_STREAM)
{
- if (rs->state >= rs_connected)
- return rs->cm_id->recv_cq_channel->fd;
- else
- return rs->cm_id->channel->fd;
+ if (rs->state >= rs_connected)
+ return rs->cm_id->recv_cq_channel->fd;
+ else
+ return rs->cm_id->channel->fd;
}
- else
+ else
{
- return rs->epfd;
+ return rs->epfd;
}
- return -1;
+ return -1;
}
-int
-rr_rs_ep_add (int fd, void *pdata, uint32_t * revent)
+int rr_rs_ep_add(int fd, void *pdata, uint32_t * revent)
{
- int ref;
- struct rsocket *rs = (struct rsocket *) idm_lookup (&idm, fd);
- RR_DBG ("(%d(%p),)\n", fd, rs);
- if (!rs)
- return _err (EBADF);
-
- ref = __sync_add_and_fetch (&rs->rr_epoll_ref, 1);
- if (1 == ref)
+ int ref;
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
+ RR_DBG("(%d(%p),)\n", fd, rs);
+ if (!rs)
+ return _err(EBADF);
+
+ ref = __sync_add_and_fetch(&rs->rr_epoll_ref, 1);
+ if (1 == ref)
{
- rs->rr_epoll_fd = rr_rs_evfd (rs);
- (void) rr_ep_add (rs->rr_epoll_fd, rs->index);
+ rs->rr_epoll_fd = rr_rs_evfd(rs);
+ (void) rr_ep_add(rs->rr_epoll_fd, rs->index);
}
- (void) rr_rs_handle_rs (rs);
- *revent = rs->state == rs_listening ? 0 : rr_rs_poll_both (rs);
+ (void) rr_rs_handle_rs(rs);
+ *revent = rs->state == rs_listening ? 0 : rr_rs_poll_both(rs);
- rs->rr_epoll_pdata = pdata;
+ rs->rr_epoll_pdata = pdata;
- RR_DBG ("*revent=0x%x\n", *revent);
- return 0;
+ RR_DBG("*revent=0x%x\n", *revent);
+ return 0;
}
-int
-rr_rs_ep_mod (int fd, void *pdata, uint32_t * revent)
+int rr_rs_ep_mod(int fd, void *pdata, uint32_t * revent)
{
- struct rsocket *rs = (struct rsocket *) idm_lookup (&idm, fd);
- RR_DBG ("(%d(%p),)\n", fd, rs);
- if (!rs)
- return _err (EBADF);
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
+ RR_DBG("(%d(%p),)\n", fd, rs);
+ if (!rs)
+ return _err(EBADF);
- if (rs->rr_epoll_ref <= 0)
- return _err (ENOENT);
+ if (rs->rr_epoll_ref <= 0)
+ return _err(ENOENT);
- (void) rr_rs_handle_rs (rs);
- *revent = rs->state == rs_listening ? 0 : rr_rs_poll_both (rs);
+ (void) rr_rs_handle_rs(rs);
+ *revent = rs->state == rs_listening ? 0 : rr_rs_poll_both(rs);
- rs->rr_epoll_pdata = pdata;
+ rs->rr_epoll_pdata = pdata;
- RR_DBG ("*revent=0x%x\n", *revent);
- return 0;
+ RR_DBG("*revent=0x%x\n", *revent);
+ return 0;
}
-int
-rr_rs_ep_del (int fd)
+int rr_rs_ep_del(int fd)
{
- int ref;
- struct rsocket *rs = (struct rsocket *) idm_lookup (&idm, fd);
- RR_DBG ("(%d(%p))\n", fd, rs);
+ int ref;
+ struct rsocket *rs = (struct rsocket *) idm_lookup(&idm, fd);
+ RR_DBG("(%d(%p))\n", fd, rs);
- if (!rs)
- return _err (EBADF);
+ if (!rs)
+ return _err(EBADF);
- ref = __sync_sub_and_fetch (&rs->rr_epoll_ref, 1);
- if (0 == ref)
+ ref = __sync_sub_and_fetch(&rs->rr_epoll_ref, 1);
+ if (0 == ref)
{
- (void) rr_ep_del (rs->rr_epoll_fd);
- rs->rr_epoll_fd = -1;
+ (void) rr_ep_del(rs->rr_epoll_fd);
+ rs->rr_epoll_fd = -1;
}
- return 0;
+ return 0;
}
#endif /* #ifndef ADPT__RSOCKET_RS_H_ */
-inline static void
-rr_rs_connected (struct rsocket *rs)
+inline static void rr_rs_connected(struct rsocket *rs)
{
- RR_DBG ("rsfd:%d ref:%d evfd:%d->%d state:0x%x\n", rs->index,
- rs->rr_epoll_ref, rs->rr_epoll_fd, rr_rs_evfd (rs), rs->state);
+ RR_DBG("rsfd:%d ref:%d evfd:%d->%d state:0x%x\n", rs->index,
+ rs->rr_epoll_ref, rs->rr_epoll_fd, rr_rs_evfd(rs), rs->state);
- if (!(rs->state & rs_connected))
+ if (!(rs->state & rs_connected))
{
- rr_rs_notify_tcp (rs);
- return;
+ rr_rs_notify_tcp(rs);
+ return;
}
- if (rs->rr_epoll_ref)
+ if (rs->rr_epoll_ref)
{
- int evfd = rr_rs_evfd (rs);
+ int evfd = rr_rs_evfd(rs);
- if (evfd != rs->rr_epoll_fd)
+ if (evfd != rs->rr_epoll_fd)
{
- (void) rr_ep_del (rs->rr_epoll_fd);
- rs->rr_epoll_fd = evfd;
- (void) rr_ep_add (evfd, rs->index);
+ (void) rr_ep_del(rs->rr_epoll_fd);
+ rs->rr_epoll_fd = evfd;
+ (void) rr_ep_add(evfd, rs->index);
}
- rr_rs_handle_tcp (rs);
+ rr_rs_handle_tcp(rs);
}
}
-int
-raccept4 (int socket, struct sockaddr *addr, socklen_t * addrlen, int flags)
+int raccept4(int socket, struct sockaddr *addr, socklen_t * addrlen,
+ int flags)
{
- int ret, fd;
- struct rsocket *rs;
+ int ret, fd;
+ struct rsocket *rs;
- RR_DBG ("(%d, %p, %p, %d)@\n", socket, addr, addrlen, flags);
- fd = raccept (socket, addr, addrlen);
- RR_DBG ("(%d, , , %d):%d:%d\n", socket, flags, fd, errno);
- if (fd < 0)
- return fd;
+ RR_DBG("(%d, %p, %p, %d)@\n", socket, addr, addrlen, flags);
+ fd = raccept(socket, addr, addrlen);
+ RR_DBG("(%d, , , %d):%d:%d\n", socket, flags, fd, errno);
+ if (fd < 0)
+ return fd;
- rs = (struct rsocket *) idm_lookup (&idm, fd);
- if (!rs)
+ rs = (struct rsocket *) idm_lookup(&idm, fd);
+ if (!rs)
{
- RR_ERR ("panic\n");
- return -1;
+ RR_ERR("panic\n");
+ return -1;
}
- if (flags & SOCK_NONBLOCK)
+ if (flags & SOCK_NONBLOCK)
{
- if (0 == (rs->fd_flags & O_NONBLOCK))
+ if (0 == (rs->fd_flags & O_NONBLOCK))
{
- RR_DBG ("orig flag:%x\n",
- GSAPI (fcntl) (rs->cm_id->channel->fd, F_GETFL));
- ret = GSAPI (fcntl) (rs->cm_id->channel->fd, F_SETFL, O_NONBLOCK);
- if (0 == ret)
- rs->fd_flags |= O_NONBLOCK;
+ RR_DBG("orig flag:%x\n",
+ GSAPI(fcntl) (rs->cm_id->channel->fd, F_GETFL));
+ ret = GSAPI(fcntl) (rs->cm_id->channel->fd, F_SETFL, O_NONBLOCK);
+ if (0 == ret)
+ rs->fd_flags |= O_NONBLOCK;
}
}
- if (flags & SOCK_CLOEXEC)
+ if (flags & SOCK_CLOEXEC)
{
- RR_LOG ("ignore flag:SOCK_CLOEXEC\n");
+ RR_LOG("ignore flag:SOCK_CLOEXEC\n");
}
- return fd;
+ return fd;
}
#endif /* #ifndef _RSOCKET_RS_C_ */
diff --git a/stacks/vpp/adapt/dmm_vcl.h b/stacks/vpp/adapt/dmm_vcl.h
deleted file mode 100644
index f0d8c85..0000000
--- a/stacks/vpp/adapt/dmm_vcl.h
+++ /dev/null
@@ -1,36 +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.
- */
-
-#ifndef included_dmm_vcl_h
-#define included_dmm_vcl_h
-
-#include "nstack_dmm_api.h"
-
-#define DMM_VCL_ENV_DEBUG "DMM_VCL_DEBUG"
-
-typedef struct dmm_vcl
-{
- int epfd;
- long unsigned int epoll_threadid;
- nstack_event_cb regVal;
- int (*p_epoll_create) (int size);
- unsigned int (*p_epoll_ctl) (int epFD, int proFD, int ctl_ops,
- struct epoll_event * events);
- unsigned int (*p_epoll_wait) (int epfd, struct epoll_event * events,
- int maxevents, int timeout);
- int (*p_close) (int fd);
-} dmm_vcl_t;
-
-#endif /* included_dmm_vcl_h */
diff --git a/stacks/vpp/adapt/dmm_vcl_adpt.c b/stacks/vpp/adapt/dmm_vcl_adpt.c
deleted file mode 100644
index 56f9033..0000000
--- a/stacks/vpp/adapt/dmm_vcl_adpt.c
+++ /dev/null
@@ -1,173 +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.
- */
-
-#define _GNU_SOURCE
-#include <pthread.h>
-#include <dlfcn.h>
-#include <sys/epoll.h>
-#include "dmm_vcl.h"
-#include "nstack_dmm_api.h" // nstack_socket_ops*
-#include <vppinfra/error.h> // clib_warning()
-
-#define DMM_VCL_ADPT_DEBUG dmm_vcl_debug
-static unsigned int dmm_vcl_debug;
-dmm_vcl_t g_dmm_vcl;
-
-unsigned int
-vpphs_ep_ctl_ops (int epFD, int proFD, int ctl_ops,
- struct epoll_event *events, void *pdata)
-{
- struct epoll_event tmpEvt;
- int ret = 0;
- int dmm_epfd;
-
- tmpEvt.data.ptr = pdata;
- tmpEvt.events = events->events;
- tmpEvt.events |= (EPOLLIN | EPOLLOUT);
-
- if (DMM_VCL_ADPT_DEBUG > 0)
- clib_warning ("DMM VCL ADPT<%d>: epfd=%d,fd=%d,ops=%d, events=%u",
- getpid (), epFD, proFD, ctl_ops, events->events);
-
- dmm_epfd = g_dmm_vcl.epfd;
- switch (ctl_ops)
- {
- case nstack_ep_triggle_add:
- ret = g_dmm_vcl.p_epoll_ctl (dmm_epfd, EPOLL_CTL_ADD, proFD, &tmpEvt);
- break;
- case nstack_ep_triggle_mod:
- ret = g_dmm_vcl.p_epoll_ctl (dmm_epfd, EPOLL_CTL_MOD, proFD, &tmpEvt);
- break;
- case nstack_ep_triggle_del:
- ret = g_dmm_vcl.p_epoll_ctl (dmm_epfd, EPOLL_CTL_DEL, proFD, &tmpEvt);
- break;
- default:
- ret = -1;
- break;
- }
- return ret;
-}
-
-#define DMM_VCL_MAX_EP_EVENT 1024
-
-static void *
-dmm_vcl_epoll_thread (void *arg)
-{
- int num, i;
-
- struct epoll_event events[DMM_VCL_MAX_EP_EVENT];
-
- while (1)
- {
- num =
- g_dmm_vcl.p_epoll_wait (g_dmm_vcl.epfd, events, DMM_VCL_MAX_EP_EVENT,
- 100);
-
- for (i = 0; i < num; ++i)
- {
- if (DMM_VCL_ADPT_DEBUG > 0)
- clib_warning
- ("DMM_VCL_ADPT<%d>: dmm_vcl_epoll i[%d] events=%u, epfd=%d, ptr=%d",
- getpid (), i, events[i].events, events[i].data.fd,
- events[i].data.ptr);
-
- g_dmm_vcl.regVal.event_cb (events[i].data.ptr, events[i].events);
-
- }
- }
-
- return NULL;
-}
-
-int
-dmm_vpphs_init ()
-{
- char *env_var_str;
- int rv = 0;
-
- env_var_str = getenv (DMM_VCL_ENV_DEBUG);
- if (env_var_str)
- {
- u32 tmp;
- if (sscanf (env_var_str, "%u", &tmp) != 1)
- clib_warning
- ("DMM_VCL_ADPT<%d>: WARNING: Invalid debug level specified "
- "in the environment variable " DMM_VCL_ENV_DEBUG " (%s)!\n",
- getpid (), env_var_str);
- else
- {
- dmm_vcl_debug = tmp;
- if (DMM_VCL_ADPT_DEBUG > 0)
- clib_warning
- ("DMM_VCL_ADPT<%d>: configured DMM VCL ADPT debug (%u) from "
- "DMM_VCL_ENV_DEBUG ", getpid (), dmm_vcl_debug);
- }
- }
-
- g_dmm_vcl.epfd = g_dmm_vcl.p_epoll_create (1000);
- if (g_dmm_vcl.epfd < 0)
- return g_dmm_vcl.epfd;
-
- rv =
- pthread_create (&g_dmm_vcl.epoll_threadid, NULL, dmm_vcl_epoll_thread,
- NULL);
- if (rv != 0)
- {
- clib_warning ("dmm vcl epoll thread create fail, errno:%d!", errno);
- g_dmm_vcl.p_close (g_dmm_vcl.epfd);
- g_dmm_vcl.epfd = -1;
- return rv;
- }
-
- rv = pthread_setname_np (g_dmm_vcl.epoll_threadid, "dmm_vcl_epoll");
- if (rv != 0)
- {
- clib_warning
- ("pthread_setname_np failed for dmm_vcl_epoll, rv=%d, errno:%d",
- rv, errno);
- }
-
- return rv;
-}
-
-int
-vpp_hoststack_stack_register (nstack_proc_cb * ops, nstack_event_cb * val)
-{
-
-#undef NSTACK_MK_DECL
-#define NSTACK_MK_DECL(ret, fn, args) \
- (ops->socket_ops).pf ## fn = (typeof(((nstack_socket_ops*)0)->pf ## fn))dlsym(val->handle, # fn);
-#include "declare_syscalls.h"
- (ops->socket_ops).pfepoll_create = NULL;
-
- g_dmm_vcl.p_epoll_ctl = dlsym (val->handle, "epoll_ctl");
- g_dmm_vcl.p_epoll_create = dlsym (val->handle, "epoll_create1");
- g_dmm_vcl.p_epoll_wait = dlsym (val->handle, "epoll_wait");
- g_dmm_vcl.p_close = dlsym (val->handle, "close");
- g_dmm_vcl.regVal = *val;
-
- ops->extern_ops.module_init = dmm_vpphs_init;
- ops->extern_ops.fork_init_child = NULL;
- ops->extern_ops.fork_parent_fd = NULL;
- ops->extern_ops.fork_child_fd = NULL;
- ops->extern_ops.fork_free_fd = NULL;
- ops->extern_ops.ep_ctl = vpphs_ep_ctl_ops;
- ops->extern_ops.ep_prewait_proc = NULL;
- ops->extern_ops.stack_fd_check = NULL;
- ops->extern_ops.stack_alloc_fd = NULL;
- ops->extern_ops.peak = NULL;
-
- return 0;
-}
diff --git a/stacks/vpp/configure/module_config.json b/stacks/vpp/configure/module_config.json
deleted file mode 100644
index fb73574..0000000
--- a/stacks/vpp/configure/module_config.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "default_stack_name": "kernel", /*when rd can't be find maybe choose the defualt one*/
- "module_list": [
- {
- "stack_name": "kernel", /*stack name*/
- "libname": "./", /*library name, if loadtype is static, this maybe
- null, else must give a library name*/
- "deploytype": "1", /*deploy model type:model type1, model type2,
- model type3. Indicating single or multi process
- deployment. Used during shared memory initialization.*/
- "stackid": "0", /*stack id, this must be ordered and not be repeated*/
- },
- {
- "stack_name": "vpp_hoststack",
- "libname": "../lib64/libdmm_vcl.so",
- "deploytype": "4",
- "stackid": "1",
- },
- ]
-}
diff --git a/stacks/vpp/configure/rd_config.json b/stacks/vpp/configure/rd_config.json
deleted file mode 100644
index 166fbec..0000000
--- a/stacks/vpp/configure/rd_config.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "ip_route": [
- {
- "subnet": "192.168.1.1/24",
- "stack_name": "vpp_hoststack",
- },
- {
- "subnet": "10.145.240.1/24",
- "stack_name": "kernel",
- },
- {
- "subnet": "192.166.1.1/24",
- "stack_name": "kernel",
- }
- ],
- "prot_route": [
- {
- "proto_type": "1",
- "stack_name": "vpp_hoststack",
- },
- {
- "proto_type": "2",
- "stack_name": "kernel",
- }
- ],
-}
diff --git a/stacks/vpp/configure/startup.conf b/stacks/vpp/configure/startup.conf
deleted file mode 100644
index ada7fdf..0000000
--- a/stacks/vpp/configure/startup.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-unix {
- interactive
- log /var/log/vpp/vpp.log
- cli-listen localhost:5002
- full-coredump
- exec /etc/vpp/vpp_config
-}
-
-api-trace {
- on
-}
-
-cpu {
- main-core 2
-}
-
-dpdk {
- socket-mem 1024
- uio-driver igb_uio
- dev 0000:00:09.0
-}
diff --git a/stacks/vpp/configure/vpp_config b/stacks/vpp/configure/vpp_config
deleted file mode 100644
index 56d80b5..0000000
--- a/stacks/vpp/configure/vpp_config
+++ /dev/null
@@ -1,6 +0,0 @@
-set int state GigabitEthernet0/9/0 up
-set int ip addr GigabitEthernet0/9/0 192.168.1.1/24
-show version
-show version verbose
-show cpu
-show int
diff --git a/stacks/vpp/doc/README.md b/stacks/vpp/doc/README.md
deleted file mode 100644
index e09aefe..0000000
--- a/stacks/vpp/doc/README.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# 1. What is VPP Host Stack
-VPP's host stack is a user space implementation of a number of transport,
-session and application layer protocols that leverages VPP's existing
-protocol stack.
-
-# 2. How to use VPP Host Stack
-
-## How to integrate VPP Host Stack into DMM
-The file CMakeList.txt defined the compiling process, including downloading
-the vpp code and patch it. The patch will modify the makefile to adapt dmm.
-
-Target 'libdmm_vcl' could not be get automatically unless you run
-'make vpp-stack' manually. It will compile the adaption code and link the
-libraries of vpp and finally generate the library of "libdmm_vcl.so".
-
-
-## Compile
-```sh
- #cd dmm/build && cmake ..
- #make vpp-statck
-```
-Note:
- After these processes, libdmm_vcl.so library would be generated in
-vpp/build-root/install-vpp_debug-native/vpp/lib64/.
-
-##Start VPP Host Stack
-- Steps 1: copy the plugins to /usr/lib/.
-```sh
- #cp -r vpp/build-root/install-vpp_debug-native/vpp/lib64/vpp_plugins /usr/lib/
-```
-
-- Steps 2: load dpdk network card driver manually.
-```sh
- #cd dpdk-18.02/x86_64-native-linuxapp-gcc/kmod/
- #modprobe uio
- #insmod igb_uio.ko
-```
-
-- Steps 3: choose a network card that is not in use and down it.
-```sh
- #ifconfig eth1 down
-```
-- Steps 4: copy the config file and start vpp
-```sh
- #cp dmm/stacks/vpp/configure/startup.conf /etc/vpp/
- #cp dmm/stacks/vpp/configure/vpp_config /etc/vpp/
- #cd vpp/build-root/install-vpp_debug-native/vpp/bin
- #./vpp -c /etc/vpp/startup.conf
-```
-Note:
- 1.modify the dev of dpdk in startup.conf.
- 2.modify the interface name and ip in vpp_config.
-
-## Test app
-Note:
- Before testing, we should anotation the dmm code that "close (listenFd);" in
- function process_server_accept_thread for server. Otherwize the app can
- not send and recieve packets.
-
-- Steps 1: copy the libdmm_vcl.so to dmm/release/lib64/
-- Steps 2: copy the config file from dmm/stacks/vpp/configure/*.json to
- dmm/release/bin and modify the rd_config.json.
-```sh
- #vim rd_config.json
- //set "subnet": "192.168.21.1/24"
-```
-Note:
- Means dmm will hijack data from subnet 192.168.21.*
-
-- Steps 3: Communication test between machine A(as server) with machine B
- (as client)
-
-##### Run in machine A
-```sh
- #cd dmm/release/bin/
- #./vs_epoll -p 20000 -d 192.168.21.180 -a 10000 -s 192.168.21.181 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
-```
-Note:
- Means the current machine would be server, and it's
-destination address is 192.168.21.180 (client address),
-source address is 192.168.21.181(server address)
-
-##### Run in machine B
-```
- #cd dmm/release/bin/
- #./vc_common -p 20000 -d 192.168.21.181 -a 10000 -s 192.168.21.180 -l 1000 -t 500000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 50000 -e 10 -x 1
-```
-Note:
- Means the current machine would be client, and it's
-destination address is 192.168.21.181 (server address),
-source address is 192.168.21.180(client address)
-
-# 3. Document description
-
-(dmm/stacks/vpp/)
-
-## configure folder
-##### module_config.json
-- module_config.json is for configuring dmm protocol stack module
-
-##### rd_config.json
-- rd_config.json is to choose which module is better to go through. It will go
- through vpp host protocol stack when RD type is nstack-vpp
-
-## patch folder
-- modify the makefile to compile the adapt code.
-
-## adapt folder
-##### dmm_vcl_adpt.c && dmm_vcl.h
-- vpp host stack adaptation code, including initialization and adaptation functions.
-
-# 4. More Information
-- https://wiki.fd.io/view/DMM
-- https://wiki.fd.io/view/VPP
-- https://wiki.fd.io/view/VPP/HostStack
diff --git a/stacks/vpp/patch/0001-Fix-modify-makefile-to-adapt-dmm.patch b/stacks/vpp/patch/0001-Fix-modify-makefile-to-adapt-dmm.patch
deleted file mode 100644
index bb3eca7..0000000
--- a/stacks/vpp/patch/0001-Fix-modify-makefile-to-adapt-dmm.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From deb61897f0505a82bd26e7fa35b6923c1455732d Mon Sep 17 00:00:00 2001
-From: Jiang Wenjiang <jiangwenjiang@huawei.com>
-Date: Thu, 9 Aug 2018 08:22:24 +0800
-Subject: [PATCH] Fix: modify makefile to adapt dmm
-
----
- src/vcl.am | 17 +++++++++++++++--
- src/vcl/ldp.c | 2 +-
- 2 files changed, 16 insertions(+), 3 deletions(-)
-
-diff --git a/src/vcl.am b/src/vcl.am
-index 89e1841..b09cacb 100644
---- a/src/vcl.am
-+++ b/src/vcl.am
-@@ -11,13 +11,18 @@
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
--lib_LTLIBRARIES += libvppcom.la libvcl_ldpreload.la
-+lib_LTLIBRARIES += libvppcom.la libvcl_ldpreload.la libdmm_vcl.la
-
- libvppcom_la_SOURCES =
- libvcl_ldpreload_la_SOURCES =
-+libdmm_vcl_la_SOURCES =
- libvppcom_la_DEPENDENCIES = \
- libsvm.la \
- libvlibmemoryclient.la
-+libdmm_vcl_la_DEPENDENCIES = \
-+ libsvm.la \
-+ libvlibmemoryclient.la \
-+ libvcl_ldpreload.la
-
- libvppcom_la_LIBADD = $(libvppcom_la_DEPENDENCIES) -lpthread -lrt -ldl
-
-@@ -40,12 +45,20 @@ libvcl_ldpreload_la_SOURCES += \
- vcl/ldp.c \
- $(libvppcom_la_SOURCES)
-
-+libdmm_vcl_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../../release/include
-+
-+libdmm_vcl_la_LIBADD = $(libdmm_vcl_la_DEPENDENCIES) -lpthread -lrt -ldl
-+
-+libdmm_vcl_la_SOURCES += \
-+ vcl/dmm_vcl_adpt.c \
-+ $(libvcl_ldpreload_la_SOURCES)
-+
- nobase_include_HEADERS += \
- vcl/ldp_socket_wrapper.h \
- vcl/ldp_glibc_socket.h \
- vcl/ldp.h
-
--noinst_PROGRAMS += \
-+bin_PROGRAMS += \
- vcl_test_server \
- vcl_test_client \
- sock_test_server \
-diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c
-index d31cd2c..e386855 100644
---- a/src/vcl/ldp.c
-+++ b/src/vcl/ldp.c
-@@ -1669,7 +1669,7 @@ send (int fd, const void *buf, size_t n, int flags)
- getpid (), fd, fd, func_str, sid, sid, buf, n, flags);
-
- size = vppcom_session_sendto (sid, (void *) buf, n, flags, NULL);
-- if (size != VPPCOM_OK)
-+ if (size <= VPPCOM_OK)
- {
- errno = -size;
- size = -1;
---
-1.8.3.1
-
diff --git a/stacks/vpp/patch/0002-Fix-fix-epoll-problem.patch b/stacks/vpp/patch/0002-Fix-fix-epoll-problem.patch
deleted file mode 100644
index 7975e27..0000000
--- a/stacks/vpp/patch/0002-Fix-fix-epoll-problem.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From bdb9568fe64c6bdfde17f61dac57a7f54214912c Mon Sep 17 00:00:00 2001
-From: Jiang Wenjiang <jiangwenjiang@huawei.com>
-Date: Mon, 10 Sep 2018 03:01:41 +0800
-Subject: [PATCH] Fix: fix epoll problem
-
-The same fd can add to different epoll.
----
- src/vcl/vppcom.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
-index cab2f60..9cb52cb 100644
---- a/src/vcl/vppcom.c
-+++ b/src/vcl/vppcom.c
-@@ -162,6 +162,7 @@ typedef struct
- u64 options[16];
- elog_track_t elog_track;
- vce_event_handler_reg_t *poll_reg;
-+ u32 ep_count; //the count that add to epoll
- } session_t;
-
- typedef struct vppcom_cfg_t_
-@@ -3430,6 +3431,7 @@ vppcom_session_write_ready (session_t * session, u32 session_index)
-
- if (PREDICT_FALSE (session->state & STATE_LISTEN))
- {
-+ return 0;
- clib_warning ("VCL<%d>: ERROR: vpp handle 0x%llx, sid %u: "
- "cannot write to a listen session!",
- getpid (), session->vpp_handle, session_index);
-@@ -3802,6 +3804,7 @@ vppcom_epoll_ctl (uint32_t vep_idx, int op, uint32_t session_index,
- session_t *vep_session;
- session_t *session;
- int rv;
-+ int ep_cnt = 0;
-
- if (vep_idx == session_index)
- {
-@@ -3846,6 +3849,9 @@ vppcom_epoll_ctl (uint32_t vep_idx, int op, uint32_t session_index,
- switch (op)
- {
- case EPOLL_CTL_ADD:
-+ ep_cnt = __sync_add_and_fetch (&(session->ep_count), 1);
-+ if (ep_cnt != 1)
-+ break;
- if (PREDICT_FALSE (!event))
- {
- clib_warning ("VCL<%d>: ERROR: EPOLL_CTL_ADD: NULL pointer to "
-@@ -3950,6 +3956,10 @@ vppcom_epoll_ctl (uint32_t vep_idx, int op, uint32_t session_index,
- break;
-
- case EPOLL_CTL_DEL:
-+ ep_cnt = __sync_sub_and_fetch (&(session->ep_count), 1);
-+ if (ep_cnt != 0)
-+ break;
-+
- if (PREDICT_FALSE (!session->is_vep_session))
- {
- clib_warning ("VCL<%d>: ERROR: sid %u EPOLL_CTL_DEL: "
---
-1.8.3.1
-
diff --git a/stacks/vpp/vagrant/Vagrantfile b/stacks/vpp/vagrant/Vagrantfile
deleted file mode 100644
index 5cf102c..0000000
--- a/stacks/vpp/vagrant/Vagrantfile
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-Vagrant.configure(2) do |config|
-
- # Pick the right distro and bootstrap, default is ubuntu1604
- distro = ( ENV['DMM_VAGRANT_DISTRO'] || "ubuntu")
- if distro == 'centos7'
- config.vm.box = "puppetlabs/centos-7.2-64-nocm"
- else
- config.vm.box = "puppetlabs/ubuntu-16.04-64-nocm"
- end
- config.vm.box_check_update = false
-
- # Create DMM client and server VM's
- config.vm.define "dmm-vpp-server" do |server|
- server.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"install_prereq.sh")
- server.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"build.sh"), :args => "/dmm vagrant"
- end
- config.vm.define "dmm-vpp-client" do |client|
- client.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"install_prereq.sh")
- client.vm.provision :shell, :path => File.join(File.dirname(__FILE__),"build.sh"), :args => "/dmm vagrant"
- end
-
-
- # vagrant-cachier caches apt/yum etc to speed subsequent
- # vagrant up
- # to enable, run
- # vagrant plugin install vagrant-cachier
- #
- if Vagrant.has_plugin?("vagrant-cachier")
- config.cache.scope = :box
- end
-
- # Define some physical ports for your VMs to be used by DPDK
- nics = (ENV['DMM_VAGRANT_NICS'] || "2").to_i(10)
- for i in 1..nics
- config.vm.network "private_network", type: "dhcp"
- # config.vm.network "private_network", ip: "172.28.128.200"
- # config.vm.network "private_network", ip: "172.28.128.201"
- end
-
- # use http proxy if avaiable
- if ENV['http_proxy'] && Vagrant.has_plugin?("vagrant-proxyconf")
- config.proxy.http = ENV['http_proxy']
- config.proxy.https = ENV['https_proxy']
- config.proxy.no_proxy = "localhost,127.0.0.1"
- end
-
- vmcpu=(ENV['DMM_VAGRANT_VMCPU'] || 4)
- vmram=(ENV['DMM_VAGRANT_VMRAM'] || 5120)
-
- config.ssh.forward_agent = true
- config.ssh.forward_x11 = true
-
- config.vm.provider "virtualbox" do |vb|
- vb.customize ["modifyvm", :id, "--ioapic", "on"]
- vb.memory = "#{vmram}"
- vb.cpus = "#{vmcpu}"
-
- config.vm.synced_folder "../../../", "/dmm", type: "rsync"
- end
-end
diff --git a/stacks/vpp/vagrant/build.sh b/stacks/vpp/vagrant/build.sh
deleted file mode 100644
index 1ed343b..0000000
--- a/stacks/vpp/vagrant/build.sh
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/bin/bash -x
-#########################################################################
-# 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.
-#########################################################################
-
-set -x
-
-TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
-log_file="/tmp/build_log.txt-$TIMESTAMP"
-exec 1> >(tee -a "$log_file") 2>&1
-
-# Get Command Line arguements if present
-TEMP_DIR=$1
-if [ "x$1" != "x" ]; then
- TEMP_DIR=$1
- DMM_BUILD_DIR=${TEMP_DIR}/build
- DPDK_BUILD_SCRIPT_DIR=${DMM_BUILD_DIR}/../scripts
- VPP_BUILD_DIR=${TEMP_DIR}/stacks/vpp/vpp/
-else
- TEMP_DIR=`dirname $(readlink -f $0)`/..
- DMM_BUILD_DIR=${TEMP_DIR}/../../build
- DPDK_BUILD_SCRIPT_DIR=${DMM_BUILD_DIR}/../scripts
- VPP_BUILD_DIR=${TEMP_DIR}
-fi
-
-echo 0:$0
-echo 1:$1
-echo 2:$2
-echo TEMP_DIR: $TEMP_DIR
-echo DMM_BUILD_DIR: $DMM_BUILD_DIR
-echo DPDK_BUILD_SCRIPT_DIR: $DPDK_BUILD_SCRIPT_DIR
-echo VPP_BUILD_DIR: $VPP_BUILD_DIR
-
-OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
-OS_VERSION_ID=$(grep '^VERSION_ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
-KERNEL_OS=`uname -o`
-KERNEL_MACHINE=`uname -m`
-KERNEL_RELEASE=`uname -r`
-KERNEL_VERSION=`uname -v`
-
-echo KERNEL_OS: $KERNEL_OS
-echo KERNEL_MACHINE: $KERNEL_MACHINE
-echo KERNEL_RELEASE: $KERNEL_RELEASE
-echo KERNEL_VERSION: $KERNEL_VERSION
-echo OS_ID: $OS_ID
-echo OS_VERSION_ID: $OS_ID
-
-#DPDK download path
-DPDK_DOWNLOAD_PATH=/tmp/dpdk
-
-#dpdk installation path
-DPDK_INSTALL_PATH=/usr
-
-#set and check the environment for Linux
-if [ "$OS_ID" == "ubuntu" ]; then
- export DEBIAN_FRONTEND=noninteractive
- export DEBCONF_NONINTERACTIVE_SEEN=true
-
- APT_OPTS="--assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\""
- sudo apt-get update ${APT_OPTS}
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump libpcre3 libpcre3-dev zlibc zlib1g zlib1g-dev vim ethtool unzip
-elif [ "$OS_ID" == "debian" ]; then
- echo "not tested for debian and exit"
- exit 1
- export DEBIAN_FRONTEND=noninteractive
- export DEBCONF_NONINTERACTIVE_SEEN=true
-
- APT_OPTS="--assume-yes --no-install-suggests --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\""
- sudo apt-get update ${APT_OPTS}
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump libpcre3 libpcre3-dev zlibc zlib1g zlib1g-dev vim
-elif [ "$OS_ID" == "centos" ]; then
- sudo yum install -y git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump vim sudo yum-utils pcre-devel zlib-devel
-elif [ "$OS_ID" == "opensuse" ]; then
- echo "not tested for opensuse and exit"
- exit 1
- sudo yum install -y git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump vim sudo yum-utils pcre-devel zlib-devel
-fi
-
-#DPDK will be having dependancy on linux headers
-if [ "$OS_ID" == "ubuntu" ]; then
- sudo apt-get -y install git build-essential linux-headers-`uname -r`
- sudo apt-get -y install libnuma-dev
-elif [ "$OS_ID" == "debian" ]; then
- sudo apt-get -y install git build-essential linux-headers-`uname -r`
-elif [ "$OS_ID" == "centos" ]; then
- sudo yum groupinstall -y "Development Tools"
- sudo yum install -y kernel-headers
- sudo yum install -y numactl-devel
-elif [ "$OS_ID" == "opensuse" ]; then
- sudo yum groupinstall -y "Development Tools"
- sudo yum install -y kernel-headers
-fi
-#===========build DPDK================
-
-if [ ! -d /usr/include/dpdk ] || [ ! -d /usr/share/dpdk ] || [ ! -d /usr/lib/modules/4.4.0-31-generic/extra/dpdk ]; then
- mkdir -p $DPDK_DOWNLOAD_PATH
-
- cd $DPDK_DOWNLOAD_PATH
- wget -N https://fast.dpdk.org/rel/dpdk-18.02.tar.xz --no-check-certificate
- tar xvf dpdk-18.02.tar.xz
- cd dpdk-18.02/
-
-
- sed -i 's!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1' config/common_base
- sed -i 's!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1' config/common_base
- sed -i 's!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1' config/common_base
- sed -i 's!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1' config/common_base
-
- sudo make install T=x86_64-native-linuxapp-gcc DESTDIR=${DPDK_INSTALL_PATH} -j 4
-
- mkdir -p /tmp/dpdk/drivers/
- cp -f /usr/lib/librte_mempool_ring.so /tmp/dpdk/drivers/
-fi
-
-#===========check running env =================
-hugepagesize=$(cat /proc/meminfo | grep Hugepagesize | awk -F " " {'print$2'})
-if [ "$hugepagesize" == "2048" ]; then
- pages=2560
-elif [ "$hugepagesize" == "1048576" ]; then
- pages=5
-fi
-sudo sysctl -w vm.nr_hugepages=$pages
-HUGEPAGES=`sysctl -n vm.nr_hugepages`
-if [ $HUGEPAGES != $pages ]; then
- echo "ERROR: Unable to get $pages hugepages, only got $HUGEPAGES. Cannot finish."
- exit
-fi
-
-
-hugepageTotal=$(cat /proc/meminfo | grep -c "HugePages_Total: 0")
-if [ $hugepageTotal -ne 0 ]; then
- echo "HugePages_Total is zero"
- exit
-fi
-
-hugepageFree=$(cat /proc/meminfo | grep -c "HugePages_Free: 0")
-if [ $hugepageFree -ne 0 ]; then
- echo "HugePages_Free is zero"
- exit
-fi
-
-hugepageSize=$(cat /proc/meminfo | grep -c "Hugepagesize: 0 kB")
-if [ $hugepageSize -ne 0 ]; then
- echo "Hugepagesize is zero"
- exit
-fi
-
-
-sudo mkdir /mnt/nstackhuge -p
-if [ "$hugepagesize" == "2048" ]; then
-sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/
-elif [ "$hugepagesize" == "1048576" ]; then
- sudo mount -t hugetlbfs -o pagesize=1G none /mnt/nstackhuge/
-fi
-
-#===========build DMM=================
-echo "DMM build started....."
-
-cd $DMM_BUILD_DIR
-ldconfig
-rm -rf *
-cmake ..
-make -j 8
-if [ $? -eq 0 ]; then
- echo "DMM build is SUCCESS"
-else
- echo "DMM build has FAILED"
- exit 1
-fi
-echo "DMM build finished....."
-
-git config --global http.sslVerify false
-#===========build vpp===========
-echo "vpp build started....."
-make vpp-stack
-if [ $? -eq 0 ]; then
- echo "vpp build is SUCCESS"
-else
- echo "vpp build has FAILED"
- exit 1
-fi
-echo "vpp build finished....."
-
-#===========set environment===========
-sudo mkdir -p /etc/vpp/
-cp /dmm/stacks/vpp/configure/startup.conf /etc/vpp/
-cp /dmm/stacks/vpp/configure/vpp_config /etc/vpp/
-
-sudo cp -r /dmm/stacks/vpp/vpp/build-root/install-vpp_debug-native/vpp/lib64/vpp_plugins/ /usr/lib/
-
-sudo modprobe uio
-sudo insmod ${DPDK_DOWNLOAD_PATH}/dpdk-18.02/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
-
-sudo ifconfig enp0s9 down
-
-if [ "$OS_ID" == "centos" ]; then
- ifaddress1=$(ifconfig enp0s9 | grep 'inet' | cut -d: -f2 | awk '{print $2}')
- echo $ifaddress1
- ifaddresscut=$(ifconfig enp0s9 | grep 'inet' | head -n 1 | awk -F " " '{print $2}' | awk -F "." '{print $1"."$2"."$3}')
- echo $ifaddresscut
-elif [ "$OS_ID" == "ubuntu" ]; then
- ifaddress1=$(ifconfig enp0s9 | grep 'inet' | head -n 1 | cut -d: -f2 | awk '{print $1}')
- echo $ifaddress1
-fi
-
-cd /etc/vpp/
-
-sudo sed -i 's!192.168.1.1!'$ifaddress1'!1' vpp_config
-
-cd $DMM_BUILD_DIR/../release/bin
-sudo cp ../../stacks/vpp/configure/*.json ./
-sudo cp ../../stacks/vpp/vpp/build-root/install-vpp_debug-native/vpp/lib64/libdmm_vcl.so ../lib64/
-sudo sed -i 's!192.168.1.1!'$ifaddresscut'.0!1' rd_config.json
diff --git a/stacks/vpp/vagrant/env.sh b/stacks/vpp/vagrant/env.sh
deleted file mode 100644
index 96ad346..0000000
--- a/stacks/vpp/vagrant/env.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-#export DMM_VAGRANT_DISTRO="ubuntu1604"
-export DMM_VAGRANT_DISTRO="centos7"
-export DMM_VAGRANT_NICS=2
-export DMM_VAGRANT_VMCPU=4
-export DMM_VAGRANT_VMRAM=8192
diff --git a/stacks/vpp/vagrant/install_prereq.sh b/stacks/vpp/vagrant/install_prereq.sh
deleted file mode 100644
index 2e636c2..0000000
--- a/stacks/vpp/vagrant/install_prereq.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash -x
-log_file="/tmp/pre_install_log.txt-`date +'%Y-%m-%d_%H-%M-%S'`"
-exec 1> >(tee -a "$log_file") 2>&1
-
-if [ "$(uname)" <> "Darwin" ]; then
- OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
- OS_VERSION_ID=$(grep '^VERSION_ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
-fi
-
-if [ "$OS_ID" == "ubuntu" ]; then
- # Standard update + upgrade dance
- cat << EOF >> /etc/apt/sources.list
- deb http://in.archive.ubuntu.com/ubuntu/ trusty main restricted
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty main restricted
- deb http://in.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
- deb http://in.archive.ubuntu.com/ubuntu/ trusty universe
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty universe
- deb http://in.archive.ubuntu.com/ubuntu/ trusty-updates universe
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty-updates universe
- deb http://in.archive.ubuntu.com/ubuntu/ trusty multiverse
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty multiverse
- deb http://in.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
- deb http://in.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
- deb-src http://in.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
- deb http://security.ubuntu.com/ubuntu trusty-security main restricted
- deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
- deb http://security.ubuntu.com/ubuntu trusty-security universe
- deb-src http://security.ubuntu.com/ubuntu trusty-security universe
- deb http://security.ubuntu.com/ubuntu trusty-security multiverse
- deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse
- deb http://extras.ubuntu.com/ubuntu trusty main
- deb-src http://extras.ubuntu.com/ubuntu trusty main
-EOF
-elif [ "$OS_ID" == "centos" ]; then
-
- echo centos
-fi