diff options
28 files changed, 538 insertions, 85 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c71a794..adb0670 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,9 @@ SET(DMM_REL_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/release/include) SET(GENERATE_RPM_PATH ${CMAKE_CURRENT_LIST_DIR}/release/rpm) file(MAKE_DIRECTORY ${GENERATE_RPM_PATH}) +SET(GENERATE_DEB_PATH ${CMAKE_CURRENT_LIST_DIR}/release/deb) +file(MAKE_DIRECTORY ${GENERATE_DEB_PATH}) + 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}) @@ -37,9 +40,23 @@ MESSAGE(STATUS "Shared library dir: " ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) add_custom_target(clean-cmake-files - COMMAND ${CMAKE_COMMAND} -P clean-all.cmake + COMMAND ${CMAKE_COMMAND} -P clean-all.cmake ) +execute_process(COMMAND git config --local --get commit.template + OUTPUT_VARIABLE commit_template) +if(commit_template STREQUAL "") + message(STATUS "Setting git commit template...") + execute_process(COMMAND git config --local commit.template ${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-template) + message(STATUS "Setting git commit template...done") +endif() + +if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg") + message(STATUS "Setting git commit hook...") + execute_process(COMMAND ln -s ${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-hook.py ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg) + message(STATUS "Setting git commit hook...done") +endif() + option(WITH_SECUREC_LIB "Option description" OFF) option(WITH_HAL_LIB "Option description" OFF) @@ -94,6 +111,8 @@ ADD_DEPENDENCIES(DPDK dmm_api) ADD_CUSTOM_TARGET(pkg-rpm COMMAND sh ../scripts/generate_dmm_rpm.sh) +ADD_CUSTOM_TARGET(pkg-deb COMMAND sh ../scripts/generate_dmm_deb.sh) + ADD_CUSTOM_TARGET(clean-all COMMAND ${CMAKE_BUILD_TOOL} clean COMMAND sh clean_compile.sh) @@ -139,7 +158,7 @@ ExternalProject_Add( GLOG SOURCE_DIR ${GLOG_SRC} BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND autoreconf COMMAND sh configure CFLAGS=-fPIC CXXFLAGS=-fPIC + CONFIGURE_COMMAND autoreconf -ivf 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}/ ) diff --git a/app_example/perf-test/multi_tcp_common_app_Cli.c b/app_example/perf-test/multi_tcp_common_app_Cli.c index 5c1fada..e395848 100644 --- a/app_example/perf-test/multi_tcp_common_app_Cli.c +++ b/app_example/perf-test/multi_tcp_common_app_Cli.c @@ -255,7 +255,7 @@ process_client (void) sizeof (g_dest)); if (errconn[i] < 0) { - printf ("client %d Connect Failed %d\n", i, errno); + printf ("client %d Connect Failed %s\n", i, strerror(errno)); _CLOSE (c_socketfd[i]); c_socketfd[i] = -1; continue; diff --git a/doc/Build_DMM.md b/doc/Build_DMM.md index 8eee84a..58bd6b8 100644 --- a/doc/Build_DMM.md +++ b/doc/Build_DMM.md @@ -10,21 +10,24 @@ Note: - Steps : - Download dpdk-16.04.tar.xz from DPDK release, you can get it from [http://static.dpdk.org/rel](http://static.dpdk.org/rel) + Download dpdk-18.02.tar.xz from DPDK release, you can get it from [http://static.dpdk.org/rel](http://static.dpdk.org/rel) ``` - #wget http://static.dpdk.org/rel/dpdk-16.04.tar.xz - #tar xvf dpdk-16.04.tar.xz - #vi dpdk-16.04/config/common_base //make CONFIG_RTE_BUILD_SHARED_LIB=y, CONFIG_RTE_EXEC_ENV=y, CONFIG_RTE_LIBRTE_EAL=y - #cd dpdk-16.04 + #wget http://static.dpdk.org/rel/dpdk-18.02.tar.xz + #tar xvf dpdk-18.02.tar.xz + #vi dpdk-18.02/config/common_base + //make CONFIG_RTE_BUILD_SHARED_LIB=y, CONFIG_RTE_EXEC_ENV=y, CONFIG_RTE_LIBRTE_EAL=y, CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/" + #cd dpdk-18.02 #make install T=x86_64-native-linuxapp-gcc DESTDIR=/usr -j 4 #cd x86_64-native-linuxapp-gcc #make //install the dpdk which will generate .so inside lib folder in the path. + #mkdir -p /tmp/dpdk/drivers/ + #cp -f /usr/lib/librte_mempool_ring.so /tmp/dpdk/drivers/ ``` Note: Environment: - Linux ubuntu 14.04 or some distro which support dpdk-16.04 + Linux ubuntu 16.04 or some distro which support dpdk-18.02 # 3. Build DMM: @@ -45,7 +48,26 @@ Note: For centos we can use the command 'make pkg-rpm' to generate the rpm package in release/rpm. -# 4. Env Setting: +# 4. Build rsocket: + +``` + #cd $(DMM_DIR)/build + #make dmm_rsocket +``` +Note: + Make sure Mellanox OFED has been installed in your computer, or run the following command before compiling + +``` + #cd $DMM_DIR/stacks/rsocket + //Take ubuntu16.04 as an example, the tgz file has the format MLNX_OFED_LINUX-<ver>-<OS label><CPU arch>.tgz + #wget http://www.mellanox.com/downloads/ofed/MLNX_OFED-4.4-1.0.0.0/MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64.tgz + #tar -zxvf MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64.tgz + #cd MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64 + #./mlnxofedinstall --force +``` + + +# 5. Env Setting: - Hugepage setting: @@ -69,7 +91,7 @@ Check hugepage info ``` -# 5. Build and Run the APP +# 6. Biuld and Run the APP - Link the app with the lib **libnStackAPI.so** first, you can refer to app_example/perf-test diff --git a/doc/TestAppUserGuide.md b/doc/TestAppUserGuide.md index 2f21023..ef118d2 100644 --- a/doc/TestAppUserGuide.md +++ b/doc/TestAppUserGuide.md @@ -98,12 +98,15 @@ We need to setup configuration as given below. Usage: -After building the DMM, inside the DMM/release directory below perf-test app will be generated. +After building the DMM, inside the DMM/release/bin directory below perf-test app will be generated. *kc_common, ks_epoll, ks_select, vc_common, vs_epoll, vs_select* The use of ks_epoll,ks_select,vs_epoll and vs_select are the same. +Before executing the app, we should disable ASLR (Address space layout randomization). + echo 0 > /proc/sys/kernel/randomize_va_space + Examples: **With Kernel stack(With direct kernel stack):** diff --git a/pkg/deb/control b/pkg/deb/control new file mode 100644 index 0000000..c220c72 --- /dev/null +++ b/pkg/deb/control @@ -0,0 +1,13 @@ +Package: dmm +Version: 18.04 +Section: tuils +Priority: optional +Depends: libc6, libstdc++6, libgcc1 +Suggests: +Architecture: amd64 +Installed-Size: +Maintainer: jorth +Original-Maintainer: +Provides: +Description: DMM is a framework for protocol stack. +Homepage: https://gerrit.fd.io/r/dmm diff --git a/scripts/dmm.spec b/pkg/rpm/dmm.spec index 4869140..1022523 100644 --- a/scripts/dmm.spec +++ b/pkg/rpm/dmm.spec @@ -7,6 +7,9 @@ License: GPL URL: https://gerrit.fd.io/r/dmm Source: %{name}-%{version}.tar.gz +BuildRequires: glibc, libstdc++, libgcc, numactl-libs +BuildRequires: dpdk >= 18.02, dpdk-devel >= 18.02 + %description The DMM framework provides posix socket APIs to the application. A protocol stack could be plugged into the DMM. DMM will choose the most suitable stack diff --git a/resources/extras/Vagrantfile b/resources/extras/Vagrantfile index c3107c9..969c91f 100644 --- a/resources/extras/Vagrantfile +++ b/resources/extras/Vagrantfile @@ -8,7 +8,8 @@ Vagrant.configure(2) do |config| if distro == 'centos7' config.vm.box = "puppetlabs/centos-7.2-64-nocm" else - config.vm.box = "fdio-csit/ubuntu-14.04.4_2016-05-25_1.0" + #config.vm.box = "fdio-csit/ubuntu-14.04.4_2016-05-25_1.0" + config.vm.box = "puppetlabs/ubuntu-16.04-64-nocm" end config.vm.box_check_update = false diff --git a/scripts/build.sh b/scripts/build.sh index 926f3b0..d412956 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,3 +1,4 @@ +#!/bin/bash -x ######################################################################### # Copyright (c) 2018 Huawei Technologies Co.,Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. ######################################################################### -#!/bin/bash -x set -x @@ -48,7 +48,13 @@ 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 +echo OS_VERSION_ID: $OS_VERSION_ID + + +# add inherited proxy for sudo user +LINE='Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"' +FILE=/etc/sudoers +grep -qF -- "$LINE" "$FILE" || sudo echo "$LINE" >> "$FILE" #DPDK download path DPDK_DOWNLOAD_PATH=/tmp/dpdk @@ -63,8 +69,10 @@ if [ "$OS_ID" == "ubuntu" ]; then 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 + 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 pkg-config tcl libnl-route-3-200 flex graphviz tk debhelper dpatch gfortran ethtool libgfortran3 bison dkms quilt chrpath swig python-libxml2 elif [ "$OS_ID" == "debian" ]; then + echo "not tested for debian and exit" + exit 1 export DEBIAN_FRONTEND=noninteractive export DEBCONF_NONINTERACTIVE_SEEN=true @@ -72,8 +80,10 @@ elif [ "$OS_ID" == "debian" ]; then 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 + sudo yum install -y deltarpm git cmake gcc g++ automake libtool wget lsof lshw pciutils net-tools tcpdump vim sudo yum-utils pcre-devel zlib-devel libiverbs tk tcl tcsh redhat-lsb-core 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 @@ -81,11 +91,13 @@ 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 @@ -95,47 +107,50 @@ fi #===========build DPDK================ if [ "$OS_ID" == "centos" ]; then - bash -x $DMM_DIR/scripts/build_dpdk.sh + bash -x $DMM_DIR/scripts/build_dpdk1802.sh || exit 1 else 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 + mkdir -p $DPDK_DOWNLOAD_PATH - DPDK_FOLDER=$DPDK_DOWNLOAD_PATH/dpdk-16.04-$TIMESTAMP - cd $DPDK_DOWNLOAD_PATH - mkdir $DPDK_FOLDER - wget -N https://fast.dpdk.org/rel/dpdk-16.04.tar.xz --no-check-certificate - tar xvf dpdk-16.04.tar.xz -C $DPDK_FOLDER - cd $DPDK_FOLDER/dpdk-16.04 + DPDK_FOLDER=$DPDK_DOWNLOAD_PATH/dpdk-18.02-$TIMESTAMP + cd $DPDK_DOWNLOAD_PATH + mkdir $DPDK_FOLDER + wget -N https://fast.dpdk.org/rel/dpdk-18.02.tar.xz --no-check-certificate + tar xvf dpdk-18.02.tar.xz -C $DPDK_FOLDER + cd $DPDK_FOLDER/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_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 + 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 fi #===========build DMM================= echo "DMM build started....." -cd $DMM_DIR/thirdparty/glog/glog-0.3.4/ && autoreconf -ivf cd $BUILD_DIR rm -rf * cmake .. make -j 8 -if [ $? -eq 0 ] -then - echo "DMM build is SUCCESS" +if [ $? -eq 0 ]; then + echo "DMM build is SUCCESS" else - echo "DMM build has FAILED" - exit 1 + echo "DMM build has FAILED" + exit 1 fi if [ "$OS_ID" == "centos" ]; then make pkg-rpm +elif [ "$OS_ID" == "ubuntu" ]; then + make pkg-deb fi #===========check running env ================= @@ -154,20 +169,20 @@ fi hugepageTotal=$(cat /proc/meminfo | grep -c "HugePages_Total: 0") if [ $hugepageTotal -ne 0 ]; then - echo "HugePages_Total is zero" - exit + 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 + 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 + echo "Hugepagesize is zero" + exit fi sudo mkdir /mnt/nstackhuge -p @@ -178,6 +193,9 @@ elif [ "$hugepagesize" == "1048576" ]; then fi sudo mkdir -p /var/run/ip_module/ +#disable ASLR, othewise it may have some problems when mapping memory for secondary process +echo 0 > /proc/sys/kernel/randomize_va_space + export LD_LIBRARY_PATH=$LIB_PATH export NSTACK_LOG_ON=DBG @@ -188,9 +206,9 @@ mkdir -p $DMM_DIR/config/app_test cd $DMM_DIR/config/app_test if [ "$OS_ID" == "ubuntu" ]; then - ifaddress1=$(ifconfig eth1 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') + ifaddress1=$(ifconfig enp0s8 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') echo $ifaddress1 - ifaddress2=$(ifconfig eth2 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') + ifaddress2=$(ifconfig enp0s9 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') echo $ifaddress2 elif [ "$OS_ID" == "centos" ]; then ifaddress1=$(ifconfig enp0s8 | grep 'inet' | cut -d: -f2 | awk '{print $2}') @@ -240,3 +258,29 @@ echo '{ }' | tee rd_config.json echo "DMM build finished....." + +############### build rsocket +echo "rsocket build start" +cd $DMM_DIR/stacks/rsocket +if [ "$OS_ID" == "ubuntu" ]; then + wget http://www.mellanox.com/downloads/ofed/MLNX_OFED-4.4-1.0.0.0/MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64.tgz + tar -zxvf MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64.tgz + cd MLNX_OFED_LINUX-4.4-1.0.0.0-ubuntu16.04-x86_64 +elif [ "$OS_ID" == "centos" ]; then + CENT_VERSION=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release` + wget http://www.mellanox.com/downloads/ofed/MLNX_OFED-4.4-1.0.0.0/MLNX_OFED_LINUX-4.4-1.0.0.0-rhel${CENT_VERSION}-x86_64.tgz + tar -zxvf MLNX_OFED_LINUX-4.4-1.0.0.0-rhel${CENT_VERSION}-x86_64.tgz + cd MLNX_OFED_LINUX-4.4-1.0.0.0-rhel${CENT_VERSION}-x86_64 +fi + +./mlnxofedinstall --force || exit 1 + +cd $BUILD_DIR +make dmm_rsocket +if [ $? -eq 0 ]; then + echo "rsocket build has SUCCESS" +else + echo "rsocket build has FAILED" + exit 1 +fi +echo "rsocket build finished" diff --git a/scripts/build_dpdk.sh b/scripts/build_dpdk1802.sh index 80a78b6..01379d6 100755 --- a/scripts/build_dpdk.sh +++ b/scripts/build_dpdk1802.sh @@ -1,3 +1,4 @@ +#!/bin/bash -x ######################################################################### # # Copyright (c) 2018 Huawei Technologies Co.,Ltd. @@ -13,7 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. ######################################################################### -#!/bin/bash -x echo "check whether dpdk installed" cur_directory=${PWD} @@ -31,41 +31,33 @@ mkdir -p rpmbuild/SOURCES cd ~/rpmbuild/SOURCES -if [ ! -s dpdk-16.04.tar.gz ]; then -wget http://dpdk.org/browse/dpdk/snapshot/dpdk-16.04.tar.gz +if [ ! -s dpdk-18.02.tar.gz ]; then +wget http://dpdk.org/browse/dpdk/snapshot/dpdk-18.02.tar.gz fi -tar xzvf dpdk-16.04.tar.gz -cp dpdk-16.04/pkg/dpdk.spec ~/rpmbuild/SOURCES/ +tar xzvf dpdk-18.02.tar.gz +cp dpdk-18.02/pkg/dpdk.spec ~/rpmbuild/SOURCES/ echo "modify the spec" -#get rid of the dependence of xen-devel -sed -i '48d' dpdk.spec -sed -i '47a BuildRequires: kernel-devel, kernel-headers, libpcap-devel' dpdk.spec - #get rid of the dependence of texlive-collection sed -i '/BuildRequires: texlive-collection/s/^/#&/' dpdk.spec -#delete something about xen -sed -i '/LIBRTE_PMD_XENVIRT/s/^/#&/' dpdk.spec -sed -i '/LIBRTE_XEN_DOM0/s/^/#&/' dpdk.spec - #delete something of generating doc sed -i '/%{target} doc/s/^/#&/' dpdk.spec -sed -i '94d' dpdk.spec -sed -i '93a datadir=%{_datadir}/dpdk' dpdk.spec -sed -i '94a # datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk' dpdk.spec +sed -i '98d' dpdk.spec +sed -i '97a datadir=%{_datadir}/dpdk' dpdk.spec +sed -i '98a # datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk' dpdk.spec sed -i '/%files doc/s/^/#&/' dpdk.spec sed -i '/%doc %{_docdir}/s/^/#&/' dpdk.spec -sed -i '76a sed -i 's!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1' config/common_base' dpdk.spec -sed -i '77a sed -i 's!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1' config/common_base' dpdk.spec -sed -i '78a sed -i 's!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1' config/common_base' dpdk.spec +sed -i '82a sed -i '\''s!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1'\'' config/common_base' dpdk.spec +sed -i '83a sed -i '\''s!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1'\'' config/common_base' dpdk.spec +sed -i '84a sed -i '\''s!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1'\'' config/common_base' dpdk.spec +sed -i '85a sed -i '\''s!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1'\'' config/common_base' dpdk.spec echo "build the dependence" #sudo yum-builddep -y dpdk.spec - sudo yum install -y libpcap-devel python-sphinx inkscape @@ -80,6 +72,10 @@ fi echo "install the rpm" cd ../RPMS/x86_64/ -sudo rpm -ivh dpdk-16.04-1.x86_64.rpm -sudo rpm -ivh dpdk-devel-16.04-1.x86_64.rpm +sudo rpm -ivh dpdk-18.02-1.x86_64.rpm || exit 1 +sudo rpm -ivh dpdk-devel-18.02-1.x86_64.rpm || exit 1 + +mkdir -p /tmp/dpdk/drivers/ +cp -f /usr/lib64/librte_mempool_ring.so /tmp/dpdk/drivers/ + cd ${cur_directory} diff --git a/scripts/build_dpdk1805.sh b/scripts/build_dpdk1805.sh new file mode 100755 index 0000000..805153b --- /dev/null +++ b/scripts/build_dpdk1805.sh @@ -0,0 +1,82 @@ +#!/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. +######################################################################### + +echo "check whether dpdk installed" +cur_directory=${PWD} +check_dpdk=$(rpm -qa | grep dpdk) +if [ -z "$check_dpdk" ]; then + echo "system will install the dpdk" +else + echo "system has installed the dpdk" + echo "$check_dpdk" + exit 0 +fi + +cd ~ +mkdir -p rpmbuild/SOURCES + +cd ~/rpmbuild/SOURCES + +if [ ! -s dpdk-18.05.tar.gz ]; then +wget http://dpdk.org/browse/dpdk/snapshot/dpdk-18.05.tar.gz +fi + +tar xzvf dpdk-18.05.tar.gz +cp dpdk-18.05/pkg/dpdk.spec ~/rpmbuild/SOURCES/ + +echo "modify the spec" + +#get rid of the dependence of texlive-collection +sed -i '/BuildRequires: texlive-collection/s/^/#&/' dpdk.spec + +#delete something of generating doc +sed -i '/%{target} doc/s/^/#&/' dpdk.spec +sed -i '70d' dpdk.spec +sed -i '69a datadir=%{_datadir}/dpdk' dpdk.spec +sed -i '70a # datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk' dpdk.spec +sed -i '/%files doc/s/^/#&/' dpdk.spec +sed -i '/%doc %{_docdir}/s/^/#&/' dpdk.spec + +sed -i '54a sed -i '\''s!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1'\'' config/common_base' dpdk.spec +sed -i '55a sed -i '\''s!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1'\'' config/common_base' dpdk.spec +sed -i '56a sed -i '\''s!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1'\'' config/common_base' dpdk.spec +sed -i '57a sed -i '\''s!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1'\'' config/common_base' dpdk.spec +sed -i '58a sed -i '\''s!CONFIG_RTE_LIBRTE_DPAA2_USE_PHYS_IOVA=.*!CONFIG_RTE_LIBRTE_DPAA2_USE_PHYS_IOVA=n!1'\'' config/common_base' dpdk.spec + +echo "build the dependence" +#sudo yum-builddep -y dpdk.spec +sudo yum install -y libpcap-devel python-sphinx inkscape + + +echo "generate the rpm package" +rpmbuild -ba dpdk.spec --define "_sourcedir ${PWD}" +if [ $? -eq 0 ]; then + echo "rpm build success" +else + echo "rpm build error" + exit +fi + +echo "install the rpm" +cd ../RPMS/x86_64/ +sudo rpm -ivh dpdk-18.05-1.x86_64.rpm || exit 1 +sudo rpm -ivh dpdk-devel-18.05-1.x86_64.rpm || exit 1 + +mkdir -p /tmp/dpdk/drivers/ +cp -f /usr/lib64/librte_mempool_ring.so /tmp/dpdk/drivers/ + +cd ${cur_directory} diff --git a/scripts/generate_dmm_deb.sh b/scripts/generate_dmm_deb.sh new file mode 100755 index 0000000..5168d07 --- /dev/null +++ b/scripts/generate_dmm_deb.sh @@ -0,0 +1,42 @@ +######################################################################### +# +# 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/sh + +cur_directory=${PWD} + +mkdir -p /tmp/mkdeb +mkdir -p /tmp/mkdeb/DEBIAN +mkdir -p /tmp/mkdeb/usr/bin +mkdir -p /tmp/mkdeb/usr/lib + +cd ../ +git archive --format=tar.gz -o /tmp/dmm.tar.gz --prefix=dmm/ HEAD + +cd /tmp/ +tar xzvf dmm.tar.gz +cd dmm/build +cmake .. +make -j 8 + +cd ../ +cp -f release/bin/* /tmp/mkdeb/usr/bin +cp -f release/lib64/* /tmp/mkdeb/usr/lib +cp -f pkg/deb/control /tmp/mkdeb/DEBIAN/ + +cd /tmp/ +dpkg-deb -b mkdeb/ ${cur_directory}/../release/deb/dmm.deb + +cd ${cur_directory} diff --git a/scripts/generate_dmm_rpm.sh b/scripts/generate_dmm_rpm.sh index bce4580..792c2a3 100755 --- a/scripts/generate_dmm_rpm.sh +++ b/scripts/generate_dmm_rpm.sh @@ -22,12 +22,12 @@ version="18.04" mkdir -p ~/rpmbuild/SOURCES cd ../ -git archive --format=tar.gz -o ~/rpmbuild/SOURCES/${name}-${version}.tar.gz --prefix=${name}-${version}/ master +git archive --format=tar.gz -o ~/rpmbuild/SOURCES/${name}-${version}.tar.gz --prefix=${name}-${version}/ HEAD cd ~/rpmbuild/SOURCES tar xzvf ${name}-${version}.tar.gz -cp ${name}-${version}/scripts/dmm.spec ~/rpmbuild/SOURCES +cp ${name}-${version}/pkg/rpm/dmm.spec ~/rpmbuild/SOURCES echo "generate the rpm package" #QA_RPATHS=$[ 0x0002 ] is to shield the warning about rpath when generating the rpm package diff --git a/scripts/git/commit-msg-hook.py b/scripts/git/commit-msg-hook.py new file mode 100755 index 0000000..719ff22 --- /dev/null +++ b/scripts/git/commit-msg-hook.py @@ -0,0 +1,136 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import sys + + +# format: \033[type;fg;bgm +# +# fg bg color +# ------------------------------------------- +# 30 40 black +# 31 41 red +# 32 42 green +# 33 43 yellow +# 34 44 blue +# 35 45 purple +# 36 46 cyan +# 37 47 white +# +# type +# ------------------------- +# 0 normal +# 1 bold +# 4 underline +# 5 blink +# 7 invert +# 8 hide +# +# examples: +# \033[1;31;40m <!--1-bold 31-red fg 40-black bg--> +# \033[0m <!--back to normal--> + + +STYLE = { + 'fore': + { + 'black' : 30, + 'red' : 31, + 'green' : 32, + 'yellow' : 33, + 'blue' : 34, + 'purple' : 35, + 'cyan' : 36, + 'white' : 37, + }, + + 'back': + { + 'black' : 40, + 'red' : 41, + 'green' : 42, + 'yellow' : 43, + 'blue' : 44, + 'purple' : 45, + 'cyan' : 46, + 'white' : 47, + }, + + 'mode': + { + 'normal' : 0, + 'bold' : 1, + 'underline' : 4, + 'blink' : 5, + 'invert' : 7, + 'hide' : 8, + }, + + 'default': + { + 'end': 0, + }, +} + + +def style(string, mode='', fore='', back=''): + + mode = '%s' % STYLE['mode'][mode] if STYLE['mode'].has_key(mode) else '' + + fore = '%s' % STYLE['fore'][fore] if STYLE['fore'].has_key(fore) else '' + + back = '%s' % STYLE['back'][back] if STYLE['back'].has_key(back) else '' + + style = ';'.join([s for s in [mode, fore, back] if s]) + + style = '\033[%sm' % style if style else '' + + end = '\033[%sm' % STYLE['default']['end'] if style else '' + + return '%s%s%s' % (style, string, end) + + +def check_subject(subject_line): + types = ['Feat', 'Fix', 'Refactor', 'Style', 'Docs', 'Test', 'Chore'] + + if subject_line.startswith(' '): + print style('Error: Subject line starts with whitespace\n', fore='red') + return 1 + + if len(subject_line) > 50: + print style('Error: Subject line should be limited to 50 chars\n', fore='red') + return 1 + + ll = subject_line.split(':') + if len(ll) < 2: + print style('Error: Subject line should have a type\n', fore='red') + return 1 + + type = ll[0] + if type not in types: + print style('Error: Subject line starts with unknown type\n', fore='red') + return 1 + + return 0 + + +contents = [] +ret = 0 +subject = True + +with open(sys.argv[1], 'r') as commit_msg: + contents = commit_msg.readlines() + +for line in contents: + dup = line.lstrip() + if dup.startswith('#'): + continue + if subject is True: + ret = check_subject(line) + subject = False + else: + if len(line) > 72: + print style('Error: Body line should be limited to 72 chars\n', fore='red') + ret = 1 + +exit(ret) diff --git a/scripts/git/commit-msg-template b/scripts/git/commit-msg-template new file mode 100644 index 0000000..6d72af1 --- /dev/null +++ b/scripts/git/commit-msg-template @@ -0,0 +1,28 @@ +# <type>: (if applied, this commit will...) <subject> (Max 50 chars) +# |<---- Using a Maximum Of 50 Characters ---->| + + +# Explain why this change is being made +# |<---- Try To Limit Each Line to a Maximum Of 72 Characters ---->| + +# Provide links or keys to any relevant tickets, articles or other resources +# Example: Github issue #23 + +# --- COMMIT END --- +# Type can be +# Feat (new feature) +# Fix (bug fix) +# Refactor (refactoring production code) +# Style (formatting, missing semi colons, etc; no code change) +# Docs (changes to documentation) +# Test (adding or refactoring tests; no production code change) +# Chore (updating grunt tasks etc; no production code change) +# -------------------- +# Remember to +# Choose one of types above in subject line +# Use the imperative mood in the subject line +# Do not end the subject line with a period +# Separate subject from body with a blank line +# Use the body to explain what and why vs. how +# Can use multiple lines with "-" for bullet points in body +# -------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d085679..1a7f63f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,7 +31,7 @@ INCLUDE_DIRECTORIES( ../thirdparty/glog/glog-0.3.4/src/ ) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIC -m64 -mssse3 -std=gnu89") +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") @@ -40,7 +40,7 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack -mcmodel=medium") SET(COMPLE_CONFIG ${PROJECT_SOURCE_DIR}/src/framework/common/include/compile_config.h) ADD_DEFINITIONS(-include ${COMM_CONFIG}) ADD_DEFINITIONS(-include ${COMPLE_CONFIG}) -ADD_DEFINITIONS(-D_GNU_SOURCE -DNSTACK_GETVER_VERSION="18.04" -D_FORTIFY_SOURCE=2) +ADD_DEFINITIONS(-D_GNU_SOURCE -DNSTACK_GETVER_VERSION="18.04") #LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) if(WITH_SECUREC_LIB) diff --git a/src/framework/common/include/types.h b/src/framework/common/include/types.h index c7d013c..bd4d80b 100644 --- a/src/framework/common/include/types.h +++ b/src/framework/common/include/types.h @@ -58,10 +58,6 @@ typedef unsigned long long u64; #define NULL ((void *)0) #endif -#define container_of(ptr, type, member) ( \ - (type *)((char *)(ptr) - offsetof(type,member)) \ - ) - #define PRIMARY_ADDR typedef struct _nsfw_res diff --git a/src/framework/common/mem_mgr/nsfw_res_mgr.c b/src/framework/common/mem_mgr/nsfw_res_mgr.c index 2f676c9..c4d8010 100644 --- a/src/framework/common/mem_mgr/nsfw_res_mgr.c +++ b/src/framework/common/mem_mgr/nsfw_res_mgr.c @@ -176,7 +176,7 @@ nsfw_res_flash_data (nsfw_res_mgr_item_cfg * res_scn_item) (struct common_mem_mempool *) scn_cfg->data; if (NULL == ring) { - ring = mp->ring; + ring = mp->pool_data; if (NULL == ring) return FALSE; } diff --git a/src/framework/include/nsfw_mgr_com_api.h b/src/framework/include/nsfw_mgr_com_api.h index 094043e..dcb602c 100644 --- a/src/framework/include/nsfw_mgr_com_api.h +++ b/src/framework/include/nsfw_mgr_com_api.h @@ -107,7 +107,7 @@ typedef enum _fw_poc_type NSFW_PROC_MAX = 16 } fw_poc_type; -#define NSFW_DOMAIN_DIR "/var/run" +#define NSFW_DOMAIN_DIR "/var/run/" #define NSTACK_MAX_PROC_NAME_LEN 20 typedef enum _nsfw_mgr_msg_rsp_code diff --git a/src/framework/ipc/mgr_com/mgr_com.c b/src/framework/ipc/mgr_com/mgr_com.c index 2b35e2c..25d8bff 100644 --- a/src/framework/ipc/mgr_com/mgr_com.c +++ b/src/framework/ipc/mgr_com/mgr_com.c @@ -1859,6 +1859,8 @@ nsfw_mgr_com_module_init (void *param) return -1; } + //TODO: check the path exist or not + NSFW_LOGINF ("module mgr init]NSFW_PROC_MAIN domain_path=%s", mgr_cfg->domain_path); diff --git a/src/framework/ipc/ps/nsfw_fd_timer.c b/src/framework/ipc/ps/nsfw_fd_timer.c index 8c73ec0..55d35cb 100644 --- a/src/framework/ipc/ps/nsfw_fd_timer.c +++ b/src/framework/ipc/ps/nsfw_fd_timer.c @@ -22,6 +22,8 @@ #include "types.h" #include "list.h" +#include "common_mem_common.h" + #include "nstack_securec.h" #include "nsfw_init.h" #include "nsfw_mgr_com_api.h" diff --git a/src/framework/ipc/ps/nsfw_ps_module.c b/src/framework/ipc/ps/nsfw_ps_module.c index 0a02e6c..e600bf7 100644 --- a/src/framework/ipc/ps/nsfw_ps_module.c +++ b/src/framework/ipc/ps/nsfw_ps_module.c @@ -39,6 +39,7 @@ #include <linux/netlink.h> #include <dirent.h> #include <fnmatch.h> +#include "common_mem_common.h" #ifdef __cplusplus /* *INDENT-OFF* */ diff --git a/src/framework/lib_common_mem/common_func.c b/src/framework/lib_common_mem/common_func.c index f68380f..0cf5b90 100644 --- a/src/framework/lib_common_mem/common_func.c +++ b/src/framework/lib_common_mem/common_func.c @@ -137,7 +137,7 @@ dmm_pktmbuf_pool_iterator (struct common_mem_mempool * mp, uint32_t start, } int32_t elm_size = mp->elt_size + mp->header_size + mp->trailer_size; - struct common_mem_mbuf *elm_mbuf = (struct common_mem_mbuf *) (mp->elt_va_start + start * elm_size + mp->header_size); /*lint !e647 */ + struct common_mem_mbuf *elm_mbuf = (struct common_mem_mbuf *) (STAILQ_FIRST(&mp->mem_list)->addr + start * elm_size + mp->header_size); /*lint !e647 */ uint32_t i; uint32_t mbuf_end = COMMON_MEM_MIN (end, mp->size) - start; diff --git a/src/nSocket/nstack/nstack.c b/src/nSocket/nstack/nstack.c index 749f06d..66281af 100644 --- a/src/nSocket/nstack/nstack.c +++ b/src/nSocket/nstack/nstack.c @@ -767,6 +767,7 @@ nstack_fw_init () if (NSTACK_MODULE_INIT == g_nStackInfo.fwInited) { + g_nStackInfo.fwInited = NSTACK_MODULE_INITING; nstack_log_init_app(); if (0 != nstack_stack_module_load()) diff --git a/src/nSocket/nstack/nstack.h b/src/nSocket/nstack/nstack.h index 6d40a7b..1ec88f0 100644 --- a/src/nSocket/nstack/nstack.h +++ b/src/nSocket/nstack/nstack.h @@ -55,6 +55,7 @@ extern "C"{ typedef enum { NSTACK_MODULE_INIT, + NSTACK_MODULE_INITING, NSTACK_MODULE_SUCCESS, NSTACK_MODULE_FAIL } nstack_module_state; diff --git a/src/nSocket/nstack/nstack_module.h b/src/nSocket/nstack/nstack_module.h index 70b838f..00d0343 100644 --- a/src/nSocket/nstack/nstack_module.h +++ b/src/nSocket/nstack/nstack_module.h @@ -46,7 +46,7 @@ extern "C"{ #define NSTACK_EP_FREE_NEED_REF 1 /*when epoll information free, need to wait that stack would not notify event */ #define NSTACK_EP_FREE_NONEED_REF 0 -#define MODULE_NAME_MAX 64 +#define MODULE_NAME_MAX 128 typedef struct __NSTACK_MODULE_KEYS { diff --git a/src/nSocket/nstack/nstack_socket.c b/src/nSocket/nstack/nstack_socket.c index 8fe493a..59ab34e 100644 --- a/src/nSocket/nstack/nstack_socket.c +++ b/src/nSocket/nstack/nstack_socket.c @@ -150,7 +150,7 @@ nstack_socket (int domain, int itype, int protocol) int selectmod = -1; /*check whether module init finish or not */ - NSTACK_INIT_CHECK_RET (socket); + NSTACK_INIT_CHECK_RET (socket, domain, itype, protocol); NSSOC_LOGINF ("(domain=%d, type=%d, protocol=%d) [Caller]", domain, itype, protocol); @@ -287,6 +287,8 @@ nstack_bind (int fd, const struct sockaddr *addr, socklen_t addrlen) struct sockaddr_in *iaddr = NULL; nstack_rd_key rdkey = { 0 }; + NSTACK_INIT_CHECK_RET (bind, fd, addr, addrlen); + NSSOC_LOGINF ("(sockfd=%d, addr=%p, addrlen=%u) [Caller]", fd, addr, addrlen); @@ -452,6 +454,8 @@ nstack_listen (int fd, int backlog) int tfd; int func_called = 0; + NSTACK_INIT_CHECK_RET (listen, fd, backlog); + NSSOC_LOGINF ("(sockfd=%d, backlog=%d) [Caller]", fd, backlog); if (fd < 0) { @@ -519,6 +523,8 @@ nstack_accept (int fd, struct sockaddr *addr, socklen_t * addr_len) nstack_fd_Inf *accInf; int ret = -1; + NSTACK_INIT_CHECK_RET (accept, fd, addr, addr_len); + NSSOC_LOGINF ("(sockfd=%d, addr=%p, addrlen=%p) [Caller]", fd, addr, addr_len); if (fd < 0) @@ -672,6 +678,8 @@ nstack_accept4 (int fd, struct sockaddr *addr, int ret = -1; nstack_fd_Inf *accInf; + NSTACK_INIT_CHECK_RET (accept4, fd, addr, addr_len, flags); + NSSOC_LOGINF ("(sockfd=%d, addr=%p, addrlen=%p, flags=%d) [Caller]", fd, addr, addr_len, flags); if (fd < 0) @@ -822,6 +830,8 @@ nstack_connect (int fd, const struct sockaddr *addr, socklen_t addrlen) int selectmod = -1; nstack_rd_key rdkey = { 0 }; + NSTACK_INIT_CHECK_RET (connect, fd, addr, addrlen); + NSSOC_LOGINF ("(sockfd=%d, addr=%p, addrlen=%u) [Caller]", fd, addr, addrlen); @@ -947,6 +957,8 @@ nstack_shutdown (int fd, int how) return -1; } + NSTACK_INIT_CHECK_RET (shutdown, fd, how); + NSSOC_LOGINF ("(fd=%d, how=%d) [Caller]", fd, how); NSTACK_FD_LINUX_CHECK (fd, shutdown, fdInf, (fd, how)); @@ -1058,6 +1070,8 @@ nstack_close (int fd) nstack_fd_Inf *fdInf; int ret = -1; + NSTACK_INIT_CHECK_RET (close, fd); + /*linux fd check */ if (!(fdInf = nstack_getValidInf (fd))) { @@ -1119,6 +1133,8 @@ nstack_send (int fd, const void *buf, size_t len, int flags) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (send, fd, buf, len, flags); + NS_LOG_CTRL (LOG_CTRL_SEND, NSOCKET, "NSSOC", NSLOG_DBG, "(sockfd=%d, buf=%p, len=%zu, flags=%d) [Caller]", fd, buf, len, flags); @@ -1152,6 +1168,8 @@ nstack_recv (int fd, void *buf, size_t len, int flags) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (recv, fd, buf, len, flags); + NS_LOG_CTRL (LOG_CTRL_RECV, NSOCKET, "NSSOC", NSLOG_DBG, "(sockfd=%d, buf=%p, len=%zu, flags=%d) [Caller]", fd, buf, len, flags); @@ -1185,6 +1203,8 @@ nstack_write (int fd, const void *buf, size_t count) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (write, fd, buf, count); + NSTACK_FD_LINUX_CHECK (fd, write, fdInf, (fd, buf, count)); NS_LOG_CTRL (LOG_CTRL_WRITE, NSOCKET, "NSSOC", NSLOG_DBG, @@ -1217,6 +1237,8 @@ nstack_read (int fd, void *buf, size_t count) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (read, fd, buf, count); + NS_LOG_CTRL (LOG_CTRL_READ, NSOCKET, "NSSOC", NSLOG_DBG, "(fd=%d, buf=%p, count=%zu) [Caller]", fd, buf, count); @@ -1248,6 +1270,8 @@ nstack_writev (int fd, const struct iovec * iov, int iovcnt) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (writev, fd, iov, iovcnt); + NS_LOG_CTRL (LOG_CTRL_WRITEV, NSOCKET, "NSSOC", NSLOG_DBG, "(fd=%d, iov=%p, count=%d) [Caller]", fd, iov, iovcnt); @@ -1280,6 +1304,8 @@ nstack_readv (int fd, const struct iovec * iov, int iovcnt) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (readv, fd, iov, iovcnt); + NS_LOG_CTRL (LOG_CTRL_READV, NSOCKET, "NSSOC", NSLOG_DBG, "(fd=%d, iov=%p, count=%d) [Caller]", fd, iov, iovcnt); @@ -1318,6 +1344,8 @@ nstack_sendto (int fd, const void *buf, size_t len, int flags, int retval = 0; nstack_rd_key rdkey = { 0 }; + NSTACK_INIT_CHECK_RET (sendto, fd, buf, len, flags, dest_addr,addrlen); + NSSOC_LOGDBG ("(sockfd=%d, buf=%p, len=%zu, flags=%d, dest_addr=%p, addrlen=%u) [Caller]", fd, buf, len, flags, dest_addr, addrlen); @@ -1400,6 +1428,8 @@ nstack_sendmsg (int fd, const struct msghdr * msg, int flags) int retval = 0; nstack_rd_key rdkey = { 0 }; + NSTACK_INIT_CHECK_RET (sendmsg, fd, msg, flags); + NS_LOG_CTRL (LOG_CTRL_SENDMSG, NSOCKET, "NSSOC", NSLOG_DBG, "(sockfd=%d, msg=%p, flags=%d) [Caller]", fd, msg, flags); @@ -1482,6 +1512,8 @@ nstack_recvfrom (int fd, void *buf, size_t len, int flags, nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (recvfrom, fd, buf, len, flags, src_addr, addrlen); + NSSOC_LOGDBG ("(sockfd=%d, buf=%p, len=%zu, flags=%d, src_addr=%p, addrlen=%p) [Caller]", fd, buf, len, flags, src_addr, addrlen); @@ -1524,6 +1556,8 @@ nstack_recvmsg (int fd, struct msghdr * msg, int flags) nstack_fd_Inf *fdInf = NULL; int size = -1; + NSTACK_INIT_CHECK_RET (recvmsg, fd, msg, flags); + NS_LOG_CTRL (LOG_CTRL_RECVMSG, NSOCKET, "NSSOC", NSLOG_DBG, "(sockfd=%d, msg=%p, flags=%d) [Caller]", fd, msg, flags); @@ -1564,6 +1598,8 @@ nstack_getsockname (int fd, struct sockaddr *addr, socklen_t * addrlen) int tfd = -1; int ret = -1; + NSTACK_INIT_CHECK_RET (getsockname, fd, addr, addrlen); + NS_LOG_CTRL (LOG_CTRL_GETSOCKNAME, NSOCKET, "NSSOC", NSLOG_INF, "(fd=%d, addr=%p, addrlen=%p) [Caller]", fd, addr, addrlen); @@ -1634,6 +1670,8 @@ nstack_getpeername (int fd, struct sockaddr *addr, socklen_t * addrlen) int tfd; int ret = -1; + NSTACK_INIT_CHECK_RET (getpeername, fd, addr, addrlen); + NS_LOG_CTRL (LOG_CTRL_GETPEERNAME, NSOCKET, "NSSOC", NSLOG_INF, "(fd=%d, addr=%p, addrlen=%p) [Caller]", fd, addr, addrlen); @@ -1766,6 +1804,8 @@ nstack_getsockopt (int fd, int level, int optname, void *optval, int ret = -1; nstack_socket_ops *ops; + NSTACK_INIT_CHECK_RET (getsockopt, fd, level, optname, optval, optlen); + NS_LOG_CTRL (LOG_CTRL_GETSOCKOPT, NSOCKET, "NSSOC", NSLOG_INF, "(fd=%d, level=%d, optname=%d, optval=%p, optlen=%p) [Caller]", fd, level, optname, optval, optlen); @@ -1850,6 +1890,8 @@ nstack_setsockopt (int fd, int level, int optname, const void *optval, int lerror = 0; int flag = 0; + NSTACK_INIT_CHECK_RET (setsockopt, fd, level, optname, optval, optlen); + NSSOC_LOGINF ("(fd=%d, level=%d, optname=%d, optval=%p, optlen=%u) [Caller]", fd, level, optname, optval, optlen); @@ -1940,6 +1982,8 @@ nstack_ioctl (int fd, unsigned long request, unsigned long argp) int lerror = 0; int flag = 0; + NSTACK_INIT_CHECK_RET (ioctl, fd, request, argp); + NSSOC_LOGINF ("(fd=%d, request=%lu) [Caller]", fd, request); if (fd < 0) { @@ -2019,6 +2063,8 @@ nstack_fcntl (int fd, int cmd, unsigned long argp) int lerror = 0; int flag = 0; + NSTACK_INIT_CHECK_RET (fcntl, fd, cmd, argp); + NSSOC_LOGINF ("(fd=%d, cmd=%d) [Caller]", fd, cmd); if (fd < 0) { @@ -2142,6 +2188,8 @@ nstack_select (int nfds, fd_set * readfds, fd_set * writefds, int i; + NSTACK_INIT_CHECK_RET (select, nfds, readfds, writefds, exceptfds, timeout); + if ((nfds > __FD_SETSIZE) || (nfds < 0) || ((timeout) && ((timeout->tv_sec < 0) || (timeout->tv_usec < 0)))) { @@ -2319,6 +2367,8 @@ nstack_epoll_ctl (int epfd, int op, int fd, struct epoll_event *event) struct epoll_event ep_event = { 0 }; struct epitem *epi = NULL; + NSTACK_INIT_CHECK_RET (epoll_ctl, epfd, op, fd, event); + NSSOC_LOGINF ("(epfd=%d, op=%d, fd=%d, event=%p) [Caller]", epfd, op, fd, event); if (event) @@ -2450,7 +2500,7 @@ nstack_epoll_create (int size) nstack_socket_ops *ops; int ret = 0; - NSTACK_INIT_CHECK_RET (epoll_create); + NSTACK_INIT_CHECK_RET (epoll_create, size); NSSOC_LOGINF ("(size=%d) [Caller]", size); @@ -2580,6 +2630,8 @@ nstack_epoll_wait (int epfd, struct epoll_event *events, int maxevents, int evt = 0; int ret = 0; + NSTACK_INIT_CHECK_RET (epoll_wait, epfd, events, maxevents, timeout); + NSTACK_FD_LINUX_CHECK (epfd, epoll_wait, fdInf, (epfd, events, maxevents, timeout)); @@ -2706,6 +2758,8 @@ nstack_fork (void) pid_t pid; pid_t parent_pid = sys_get_hostpid_from_file (getpid ()); + NSTACK_INIT_CHECK_RET (fork); + common_mem_rwlock_write_lock (get_fork_lock ()); if (NSTACK_MODULE_SUCCESS == g_nStackInfo.fwInited) { diff --git a/src/nSocket/nstack/nstack_socket.h b/src/nSocket/nstack/nstack_socket.h index 3bc4a10..3bb7843 100644 --- a/src/nSocket/nstack/nstack_socket.h +++ b/src/nSocket/nstack/nstack_socket.h @@ -190,12 +190,18 @@ UNLOCK_CLOSE (nstack_fd_local_lock_info_t * local_lock) #define UNLOCK_FOR_EP(local_lock) UNLOCK_CLOSE(local_lock) -#define NSTACK_INIT_CHECK_RET(fun) \ - if (nstack_fw_init()) { \ - NSSOC_LOGERR("nstack %s call, but initial not finished yet [return]", #fun); \ - nstack_set_errno(ENOSYS); \ - return -1; \ - } +#define NSTACK_INIT_CHECK_RET(fun, args...) \ + do { \ + if (NSTACK_MODULE_INITING == g_nStackInfo.fwInited) { \ + NSSOC_LOGINF ("call kernel func %s", #fun); \ + return nsfw_base_##fun(args); \ + } \ + if (nstack_fw_init()) { \ + NSSOC_LOGERR("nstack %s call, but initial not finished yet [return]", #fun); \ + nstack_set_errno(ENOSYS); \ + return -1; \ + } \ + }while(0) #define NSTACK_MODULE_ERROR_SET(Index) diff --git a/src/nSocket/nstack_rd/nstack_rd_proto.c b/src/nSocket/nstack_rd/nstack_rd_proto.c index 16f4e1f..81246c0 100644 --- a/src/nSocket/nstack_rd/nstack_rd_proto.c +++ b/src/nSocket/nstack_rd/nstack_rd_proto.c @@ -23,6 +23,7 @@ #include "nstack_rd_proto.h" #include "nstack_log.h" #include "nstack_securec.h" +#include "common_mem_common.h" /*copy rd data*/ int |