create new project.
除sapp和插件之外, 其他模块也经常有从某个层跳转到某个层的需求, 从sapp中剥离此部分代码, 独立成为一个公共库.
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
build
|
||||
__view
|
||||
*.o
|
||||
*.so
|
||||
*.a
|
||||
114
.gitlab-ci.yml
Normal file
114
.gitlab-ci.yml
Normal file
@@ -0,0 +1,114 @@
|
||||
image: "git.mesalab.cn:7443/mesa_platform/build-env:master"
|
||||
variables:
|
||||
GIT_STRATEGY: "clone"
|
||||
BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/
|
||||
INSTALL_PREFIX: "/opt/MESA/lib/"
|
||||
INSTALL_DEPENDENCY_LIBRARY: sapp-devel framework_env libpcap libpcap-devel
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
.build_by_travis:
|
||||
before_script:
|
||||
- mkdir -p $BUILD_PADDING_PREFIX/$CI_PROJECT_NAMESPACE/
|
||||
- ln -s $CI_PROJECT_DIR $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
|
||||
- cd $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
|
||||
- chmod +x ./ci/travis.sh
|
||||
script:
|
||||
- yum makecache
|
||||
- ./ci/travis.sh
|
||||
- cd build
|
||||
tags:
|
||||
- share
|
||||
|
||||
branch_build_debug:
|
||||
stage: build
|
||||
extends: .build_by_travis
|
||||
variables:
|
||||
BUILD_TYPE: Debug
|
||||
except:
|
||||
- /^develop.*$/i
|
||||
- /^master.*$/i
|
||||
- tags
|
||||
|
||||
branch_build_release:
|
||||
stage: build
|
||||
variables:
|
||||
BUILD_TYPE: RelWithDebInfo
|
||||
extends: .build_by_travis
|
||||
except:
|
||||
- /^develop.*$/i
|
||||
- /^master.*$/i
|
||||
- tags
|
||||
|
||||
develop_build_debug:
|
||||
stage: build
|
||||
extends: .build_by_travis
|
||||
variables:
|
||||
BUILD_TYPE: Debug
|
||||
PACKAGE: 1
|
||||
UPLOAD_RPM: 1
|
||||
ASAN_OPTION: ADDRESS
|
||||
TESTING_VERSION_BUILD: 1
|
||||
PULP3_REPO_NAME: framework-testing-x86_64.el7
|
||||
PULP3_DIST_NAME: framework-testing-x86_64.el7
|
||||
artifacts:
|
||||
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-debug"
|
||||
paths:
|
||||
- build/*.rpm
|
||||
only:
|
||||
- /^develop.*$/i
|
||||
- /^master.*$/i
|
||||
|
||||
develop_build_release:
|
||||
stage: build
|
||||
extends: .build_by_travis
|
||||
variables:
|
||||
BUILD_TYPE: RelWithDebInfo
|
||||
PACKAGE: 1
|
||||
UPLOAD_RPM: 1
|
||||
ASAN_OPTION: "OFF"
|
||||
TESTING_VERSION_BUILD: 1
|
||||
PULP3_REPO_NAME: framework-testing-x86_64.el7
|
||||
PULP3_DIST_NAME: framework-testing-x86_64.el7
|
||||
artifacts:
|
||||
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-release"
|
||||
paths:
|
||||
- build/*.rpm
|
||||
only:
|
||||
- /^develop.*$/i
|
||||
- /^master.*$/i
|
||||
|
||||
release_build_debug:
|
||||
stage: build
|
||||
variables:
|
||||
BUILD_TYPE: Debug
|
||||
PACKAGE: 1
|
||||
UPLOAD_RPM: 1
|
||||
PULP3_REPO_NAME: framework-stable-x86_64.el7
|
||||
PULP3_DIST_NAME: framework-stable-x86_64.el7
|
||||
extends: .build_by_travis
|
||||
artifacts:
|
||||
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-release"
|
||||
paths:
|
||||
- build/*.rpm
|
||||
only:
|
||||
- tags
|
||||
|
||||
release_build_release:
|
||||
stage: build
|
||||
variables:
|
||||
BUILD_TYPE: RelWithDebInfo
|
||||
PACKAGE: 1
|
||||
UPLOAD_RPM: 1
|
||||
UPLOAD_SYMBOL_FILES: 1
|
||||
SYMBOL_TARGET: libMESA_jump_layer
|
||||
PULP3_REPO_NAME: framework-stable-x86_64.el7
|
||||
PULP3_DIST_NAME: framework-stable-x86_64.el7
|
||||
extends: .build_by_travis
|
||||
artifacts:
|
||||
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-release"
|
||||
paths:
|
||||
- build/*.rpm
|
||||
only:
|
||||
- tags
|
||||
56
CMakeLists.txt
Normal file
56
CMakeLists.txt
Normal file
@@ -0,0 +1,56 @@
|
||||
cmake_minimum_required (VERSION 2.8)
|
||||
|
||||
set(lib_name MESA_jump_layer)
|
||||
|
||||
project (${lib_name})
|
||||
|
||||
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
||||
include(Version)
|
||||
|
||||
set(CMAKE_MACOSX_RPATH 0)
|
||||
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wall)
|
||||
set(CMAKE_INSTALL_PREFIX /opt/MESA)
|
||||
|
||||
set(MESA_SDK_PREFIX "/opt/MESA/")
|
||||
include_directories(${CMAKE_SOURCE_DIR}/inc)
|
||||
include_directories(${MESA_SDK_PREFIX}/include)
|
||||
include_directories(${MESA_SDK_PREFIX}/include/MESA)
|
||||
|
||||
#for ASAN
|
||||
set(ASAN_OPTION "OFF" CACHE STRING " set asan type chosen by the user, using OFF as default")
|
||||
set_property(CACHE ASAN_OPTION PROPERTY STRINGS OFF ADDRESS THREAD)
|
||||
message(STATUS "ASAN_OPTION='${ASAN_OPTION}'")
|
||||
|
||||
if(ASAN_OPTION MATCHES "ADDRESS")
|
||||
set(CMAKE_C_FLAGS "${CMAKADDRESS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=address -fno-omit-frame-pointer")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=address -fno-omit-frame-pointer")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
|
||||
elseif(ASAN_OPTION MATCHES "THREAD")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=thread -fno-omit-frame-pointer")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=thread -fno-omit-frame-pointer")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
|
||||
endif()
|
||||
# end of for ASAN
|
||||
|
||||
include_directories(${PROJECT_SOURCE_DIR}/include/)
|
||||
|
||||
file(GLOB SRC
|
||||
"src/*.c"
|
||||
"src/*.cpp"
|
||||
)
|
||||
|
||||
# Shared Library Output
|
||||
add_library(${lib_name}_shared SHARED ${SRC})
|
||||
target_link_libraries(${lib_name}_shared m)
|
||||
if(DEFINED MESA_SHARED_INSTALL_DIR)
|
||||
set_target_properties(${lib_name}_shared PROPERTIES OUTPUT_NAME ${lib_name} LIBRARY_OUTPUT_DIRECTORY ${MESA_SHARED_INSTALL_DIR})
|
||||
else()
|
||||
set_target_properties(${lib_name}_shared PROPERTIES OUTPUT_NAME ${lib_name})
|
||||
endif()
|
||||
|
||||
install(TARGETS ${lib_name}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib COMPONENT LIBRARY)
|
||||
install(FILES inc/MESA_jump_layer.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/MESA COMPONENT HEADER)
|
||||
|
||||
include(Package)
|
||||
1268
autorevision.sh
Normal file
1268
autorevision.sh
Normal file
File diff suppressed because it is too large
Load Diff
48
ci/get-nprocessors.sh
Normal file
48
ci/get-nprocessors.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright 2017 Google Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * 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.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "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 COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS 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 typically sourced by another script.
|
||||
# if possible, ask for the precise number of processors,
|
||||
# otherwise take 2 processors as reasonable default; see
|
||||
# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization
|
||||
if [ -x /usr/bin/getconf ]; then
|
||||
NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN)
|
||||
else
|
||||
NPROCESSORS=2
|
||||
fi
|
||||
|
||||
# as of 2017-09-04 Travis CI reports 32 processors, but GCC build
|
||||
# crashes if parallelized too much (maybe memory consumption problem),
|
||||
# so limit to 4 processors for the time being.
|
||||
if [ $NPROCESSORS -gt 4 ] ; then
|
||||
echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4."
|
||||
NPROCESSORS=4
|
||||
fi
|
||||
3
ci/perpare_pulp3_netrc.sh
Normal file
3
ci/perpare_pulp3_netrc.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env sh
|
||||
set -evx
|
||||
echo "machine ${PULP3_SERVER_URL}\nlogin ${PULP3_SERVER_LOGIN}\npassword ${PULP3_SERVER_PASSWORD}\n" > ~/.netrc
|
||||
70
ci/travis.sh
Normal file
70
ci/travis.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env sh
|
||||
set -evx
|
||||
|
||||
chmod +x ci/get-nprocessors.sh
|
||||
. ci/get-nprocessors.sh
|
||||
|
||||
# if possible, ask for the precise number of processors,
|
||||
# otherwise take 2 processors as reasonable default; see
|
||||
# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization
|
||||
if [ -x /usr/bin/getconf ]; then
|
||||
NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN)
|
||||
else
|
||||
NPROCESSORS=2
|
||||
fi
|
||||
|
||||
# as of 2017-09-04 Travis CI reports 32 processors, but GCC build
|
||||
# crashes if parallelized too much (maybe memory consumption problem),
|
||||
# so limit to 4 processors for the time being.
|
||||
if [ $NPROCESSORS -gt 4 ] ; then
|
||||
echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4."
|
||||
NPROCESSORS=4
|
||||
fi
|
||||
|
||||
# Tell make to use the processors. No preceding '-' required.
|
||||
MAKEFLAGS="j${NPROCESSORS}"
|
||||
export MAKEFLAGS
|
||||
|
||||
env | sort
|
||||
|
||||
# Set default values to OFF for these variables if not specified.
|
||||
: "${NO_EXCEPTION:=OFF}"
|
||||
: "${NO_RTTI:=OFF}"
|
||||
: "${COMPILER_IS_GNUCXX:=OFF}"
|
||||
|
||||
# Install dependency from YUM
|
||||
if [ -n "${INSTALL_DEPENDENCY_LIBRARY}" ]; then
|
||||
yum install -y $INSTALL_DEPENDENCY_LIBRARY
|
||||
fi
|
||||
|
||||
if [ $ASAN_OPTION ];then
|
||||
source /opt/rh/devtoolset-7/enable
|
||||
fi
|
||||
|
||||
mkdir build || true
|
||||
cd build
|
||||
|
||||
cmake3 -DCMAKE_CXX_FLAGS=$CXX_FLAGS \
|
||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
|
||||
-DASAN_OPTION=$ASAN_OPTION \
|
||||
-DVERSION_DAILY_BUILD=$TESTING_VERSION_BUILD \
|
||||
..
|
||||
|
||||
make
|
||||
|
||||
if [ -n "${PACKAGE}" ]; then
|
||||
make package
|
||||
fi
|
||||
|
||||
if [ -n "${UPLOAD_RPM}" ]; then
|
||||
cp ~/rpm_upload_tools.py ./
|
||||
python3 rpm_upload_tools.py ${PULP3_REPO_NAME} ${PULP3_DIST_NAME} *.rpm
|
||||
fi
|
||||
|
||||
if [ -n "${UPLOAD_SYMBOL_FILES}" ]; then
|
||||
rpm -i $SYMBOL_TARGET*debuginfo*.rpm
|
||||
_symbol_file=`find /usr/lib/debug/ -name "$SYMBOL_TARGET*.so*.debug"`
|
||||
cp $_symbol_file ${_symbol_file}info.${CI_COMMIT_SHORT_SHA}
|
||||
sentry-cli upload-dif -t elf ${_symbol_file}info.${CI_COMMIT_SHORT_SHA}
|
||||
fi
|
||||
5
cmake/.gitignore
vendored
Normal file
5
cmake/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
build
|
||||
__view
|
||||
*.o
|
||||
*.so
|
||||
*.a
|
||||
54
cmake/Package.cmake
Normal file
54
cmake/Package.cmake
Normal file
@@ -0,0 +1,54 @@
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(MY_RPM_NAME_PREFIX "lib${lib_name}-debug")
|
||||
else()
|
||||
set(MY_RPM_NAME_PREFIX "lib${lib_name}")
|
||||
endif()
|
||||
|
||||
message(STATUS "Package: ${MY_RPM_NAME_PREFIX}")
|
||||
|
||||
set(CPACK_PACKAGE_VECDOR "MESA")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}.${VERSION_BUILD}")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}")
|
||||
execute_process(COMMAND bash -c "echo -ne \"`uname -r | awk -F'.' '{print $5\".\"$6\".\"$7}'`\"" OUTPUT_VARIABLE SYSTEM_VERSION)
|
||||
|
||||
# RPM Build
|
||||
set(CPACK_GENERATOR "RPM")
|
||||
set(CPACK_RPM_PACKAGE_VENDOR "MESA")
|
||||
set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes")
|
||||
set(CPACK_RPM_PACKAGE_RELEASE_LIBRARY "on")
|
||||
set(CPACK_RPM_DEBUGINFO_PACKAGE "on")
|
||||
set(CPACK_RPM_PACKAGE_DEBUG 1)
|
||||
|
||||
set(CPACK_RPM_COMPONENT_INSTALL ON)
|
||||
set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
|
||||
set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
|
||||
set(CPACK_COMPONENT_HEADER_DISPLAY_NAME "develop")
|
||||
set(CPACK_COMPONENT_LIBRARY_REQUIRED TRUE)
|
||||
set(CPACK_COMPONENT_HEADER_REQUIRED TRUE)
|
||||
set(CPACK_RPM_HEADER_PACKAGE_NAME "${MY_RPM_NAME_PREFIX}-devel")
|
||||
set(CPACK_RPM_LIBRARY_PACKAGE_NAME ${MY_RPM_NAME_PREFIX})
|
||||
|
||||
set(CPACK_RPM_FILE_NAME "${CPACK_RPM_LIBRARY_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
|
||||
set(CPACK_RPM_LIBRARY_DEBUGINFO_FILE_NAME "${CPACK_RPM_LIBRARY_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
|
||||
set(CPACK_COMPONENT_LIBRARY_GROUP "library")
|
||||
|
||||
set(CPACK_RPM_HEADER_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
|
||||
set(CPACK_RPM_HEADER_DEBUGINFO_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
|
||||
set(CPACK_COMPONENT_HEADER_GROUP "header")
|
||||
|
||||
set(CPACK_RPM_HEADER_PACKAGE_REQUIRES_PRE ${CPACK_RPM_LIBRARY_PACKAGE_NAME})
|
||||
set(CPACK_RPM_HEADER_PACKAGE_CONFLICTS ${CPACK_RPM_HEADER_PACKAGE_NAME})
|
||||
|
||||
set(CPACK_COMPONENTS_ALL LIBRARY HEADER)
|
||||
|
||||
|
||||
set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")
|
||||
|
||||
# Must uninstall the debug package before install release package
|
||||
set(CPACK_RPM_PACKAGE_CONFLICTS ${MY_RPM_NAME_PREFIX})
|
||||
|
||||
# set(CPACK_STRIP_FILES TRUE)
|
||||
include(CPack)
|
||||
54
cmake/Version.cmake
Normal file
54
cmake/Version.cmake
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
# Using autorevision.sh to generate version information
|
||||
|
||||
set(__SOURCE_AUTORESIVISION ${CMAKE_SOURCE_DIR}/autorevision.sh)
|
||||
set(__AUTORESIVISION ${CMAKE_BINARY_DIR}/autorevision.sh)
|
||||
set(__VERSION_CACHE ${CMAKE_SOURCE_DIR}/version.txt)
|
||||
set(__VERSION_CONFIG ${CMAKE_BINARY_DIR}/version.cmake)
|
||||
|
||||
file(COPY ${__SOURCE_AUTORESIVISION} DESTINATION ${CMAKE_BINARY_DIR}
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
|
||||
# execute autorevision.sh to generate version information
|
||||
execute_process(COMMAND ${__AUTORESIVISION} -t cmake -o ${__VERSION_CACHE}
|
||||
OUTPUT_FILE ${__VERSION_CONFIG} ERROR_QUIET)
|
||||
include(${__VERSION_CONFIG})
|
||||
|
||||
# extract major, minor, patch version from git tag
|
||||
string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VCS_TAG}")
|
||||
string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VCS_TAG}")
|
||||
string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VCS_TAG}")
|
||||
string(REGEX REPLACE "[T\\:\\+\\-]" "" VERSION_DATE "${VCS_DATE}")
|
||||
|
||||
if(VERSION_DAILY_BUILD)
|
||||
set(VERSION_PATCH ${VERSION_PATCH}.${VERSION_DATE})
|
||||
endif()
|
||||
|
||||
if(NOT VERSION_MAJOR)
|
||||
set(VERSION_MAJOR 1)
|
||||
endif()
|
||||
|
||||
if(NOT VERSION_MINOR)
|
||||
set(VERSION_MINOR 0)
|
||||
endif()
|
||||
|
||||
if(NOT VERSION_PATCH)
|
||||
set(VERSION_PATCH 0)
|
||||
endif()
|
||||
|
||||
set(VERSION "${VERSION_MAJOR}_${VERSION_MINOR}_${VERSION_PATCH}")
|
||||
set(VERSION_BUILD "${VCS_SHORT_HASH}")
|
||||
|
||||
# print information
|
||||
message(STATUS "Version: ${VERSION}-${VERSION_BUILD}")
|
||||
|
||||
option(DEFINE_GIT_VERSION "Set DEFINE_GIT_VERSION to TRUE or FALSE" TRUE)
|
||||
|
||||
if(DEFINE_GIT_VERSION)
|
||||
set(GIT_VERSION
|
||||
"${VERSION}-${CMAKE_BUILD_TYPE}-${VERSION_BUILD}-${VCS_BRANCH}-${VCS_TAG}-${VCS_DATE}")
|
||||
string(REGEX REPLACE "[-:+/\\.]" "_" GIT_VERSION ${GIT_VERSION})
|
||||
|
||||
add_definitions(-DGIT_VERSION=${GIT_VERSION})
|
||||
endif()
|
||||
30
inc/MESA_jump_layer.h
Normal file
30
inc/MESA_jump_layer.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef __MESA_JUMP_LAYER_H_
|
||||
#define __MESA_JUMP_LAYER_H_ 1
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "stream.h"
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/ip6.h>
|
||||
|
||||
|
||||
const char *MESA_jump_layer_get_last_error(void);
|
||||
|
||||
/*
|
||||
The raw_layer_type and expect_layer_type refer to sapp_base.h->enum addr_type_t
|
||||
*/
|
||||
const void *MESA_net_jump_to_layer(const void *raw_data, int raw_layer_type, int expect_layer_type);
|
||||
|
||||
const void *MESA_net_jump_to_layer_greedy(const void *raw_data, int raw_layer_type, int expect_layer_type);
|
||||
|
||||
|
||||
const char *MESA_jump_layer_ipv4_ntop(const struct ip *ip4_hdr, char *out_buf, int buf_len );
|
||||
|
||||
const char *MESA_jump_layer_ipv6_ntop(const struct ip6_hdr *ip6_hdr, char *out_buf, int buf_len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
1501
src/MESA_jump_layer.cpp
Normal file
1501
src/MESA_jump_layer.cpp
Normal file
File diff suppressed because it is too large
Load Diff
10
src/Makefile
Normal file
10
src/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
INC=-I../inc -I/opt/MESA/include -I/opt/MESA/include/MESA -I/opt/MESA/include/MESA/stream_inc
|
||||
CFLAGS=-g -Wall
|
||||
|
||||
all:libMESA_jump_layer.so
|
||||
|
||||
libMESA_jump_layer.so:MESA_jump_layer.o
|
||||
g++ -o $@ $^ -fPIC -shared
|
||||
|
||||
MESA_jump_layer.o:MESA_jump_layer.cpp
|
||||
g++ -c -fPIC -o $@ $^ $(INC) $(CFLAGS)
|
||||
113
src/deal_ipv6.h
Normal file
113
src/deal_ipv6.h
Normal file
@@ -0,0 +1,113 @@
|
||||
#ifndef __DEAL_IPV6_H_
|
||||
#define __DEAL_IPV6_H_
|
||||
|
||||
#include <netinet/ip6.h>
|
||||
|
||||
#define IPV6_DEBUG (0)
|
||||
|
||||
#define IPV6_FRAG_DUMP (1 && IPV6_DEBUG)
|
||||
|
||||
#define IPV6_MAXPLEN (65535)
|
||||
|
||||
#define IPV6_FRAG_RESERVED_HDR_LEN (40) /* Ԥ<><D4A4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>IPv6<76><36>Ƭͷ<C6AC><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
|
||||
//#define IPV6_FRAG_TIMEOUT (60) /* <20><><EFBFBD>鳬ʱʱ<CAB1><CAB1> */
|
||||
/*
|
||||
2015-12-02 lijia modify,
|
||||
<09><>ȻRFC<46>涨, 60<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>ǺϷ<C7BA><CFB7><EFBFBD>,
|
||||
<09><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, IPv6<76><36>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD>ڻ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>, ֱ<><D6B1>free.
|
||||
*/
|
||||
#define IPV6_FRAG_TIMEOUT (10) /* <20><><EFBFBD>鳬ʱʱ<CAB1><CAB1> */
|
||||
|
||||
|
||||
#define IPV6_FRAG_MEM_FREE_ONCE (512*1024) /* ÿ<><C3BF><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define IPV6_FRAG_MEM_HIGH_THRESH (16*1024*1024) /* <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> */
|
||||
|
||||
#define IPV6_FRAG_NUM_PER_IPQ (100) /* ͬһIPQ<50><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> */
|
||||
|
||||
#if IPV6_DEBUG
|
||||
#define IPV6_PRINT(fmt, args...) printf(fmt, ##args)
|
||||
#else
|
||||
#define IPV6_PRINT(fmt, args...)
|
||||
#endif
|
||||
|
||||
|
||||
struct simple_ip6_hdr
|
||||
{
|
||||
unsigned char ip6_flags[4]; /* version, traffic-class, flow-label */
|
||||
u_int16_t ip6_payload_len; /* payload length, not contain header */
|
||||
unsigned char ip6_nxt_hdr; /* next header, same as protocol in IPv4 */
|
||||
unsigned char ip6_hop; /* hop limit, same as TTL in IPv4 */
|
||||
struct in6_addr ip6_src; /* source address */
|
||||
struct in6_addr ip6_dst; /* dest address */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* NextHeader field of IPv6 header
|
||||
*/
|
||||
#define NEXTHDR_HOP 0 /* Hop-by-hop option header. */
|
||||
#define NEXTHDR_IPIP 4 /* IPIP header. */
|
||||
#define NEXTHDR_TCP 6 /* TCP segment. */
|
||||
#define NEXTHDR_UDP 17 /* UDP message. */
|
||||
#define NEXTHDR_IPV6 41 /* IPv6 in IPv6 */
|
||||
#define NEXTHDR_ROUTING 43 /* Routing header. */
|
||||
#define NEXTHDR_FRAGMENT 44 /* Fragmentation/reassembly header. */
|
||||
#define NEXTHDR_ESP 50 /* Encapsulating security payload. */
|
||||
#define NEXTHDR_AUTH 51 /* Authentication header. */
|
||||
#define NEXTHDR_ICMP 58 /* ICMP for IPv6. */
|
||||
#define NEXTHDR_NONE 59 /* No next header */
|
||||
#define NEXTHDR_DEST 60 /* Destination options header. */
|
||||
#define NEXTHDR_MOBILITY 135 /* Mobility header. */
|
||||
|
||||
struct ipv6_opt_hdr{
|
||||
unsigned char nexthdr;
|
||||
unsigned char hdrlen;
|
||||
/*
|
||||
* TLV encoded option data follows.
|
||||
*/
|
||||
} __attribute__((packed)); /* required for some archs */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Hop-By-Hop header
|
||||
*/
|
||||
struct ipv6_hop_hdr{
|
||||
unsigned char nexthdr;
|
||||
unsigned char hdrlen;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* fragmentation header
|
||||
*/
|
||||
|
||||
#define IPv6_FRAG_ISF (1) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC> */
|
||||
#define IPv6_FRAG_NEW (2) /* <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>з<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>°<EFBFBD> */
|
||||
|
||||
#define IP6_MF (0x0001)
|
||||
|
||||
struct ipv6_frag_hdr{
|
||||
unsigned char nexthdr;
|
||||
unsigned char reserved;
|
||||
unsigned short frag_off;
|
||||
unsigned int identification;
|
||||
};
|
||||
|
||||
struct ipv6_frag_key{
|
||||
unsigned int identification; /* <20><><EFBFBD>п<EFBFBD><D0BF>ܲ<EFBFBD>ͬ<EFBFBD><CDAC>ֵ<EFBFBD><D6B5><EFBFBD>ڽṹ<DABD><E1B9B9>ǰ<EFBFBD>棬<EFBFBD>Ƚ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һЩ */
|
||||
int __pad__; /* <20><><EFBFBD><EFBFBD><EFBFBD>ṹ8<E1B9B9>ֽڶ<D6BD><DAB6><EFBFBD> */
|
||||
struct in6_addr ip6_src; /* source address */
|
||||
struct in6_addr ip6_dst; /* dest address */
|
||||
struct streaminfo_private *pfstream_pr;
|
||||
};
|
||||
|
||||
struct ipv6_frag_private{
|
||||
unsigned char raw_next_hdr; /* ԭʼIP<49><50><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ɷ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
int unfragmentable_len; /* ԭʼIP<49><50><EFBFBD>IJ<EFBFBD><C4B2>ɷ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD> */
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
885
src/mesa_net.h
Normal file
885
src/mesa_net.h
Normal file
@@ -0,0 +1,885 @@
|
||||
#ifndef _MESA_NET_H_
|
||||
#define _MESA_NET_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <endian.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip_icmp.h>
|
||||
#include <netinet/in_systm.h>
|
||||
#include <linux/ppp_defs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define BYTE_ALIGNED(n) __attribute__((packed, aligned(n)))
|
||||
|
||||
|
||||
#define SENDPACKET_ARP_H 0x1c /* ARP header: 28 bytes */
|
||||
#define SENDPACKET_ETH_H 0xe /* Etherner header: 14 bytes */
|
||||
#define SENDPACKET_IP_H 0x14 /* IP header: 20 bytes */
|
||||
/* See sendpacket-ospf.h for OSPF related header sizes */
|
||||
#define SENDPACKET_RIP_H 0x18 /* RIP header base: 24 bytes */
|
||||
#define SENDPACKET_TCP_H 0x14 /* TCP header: 20 bytes */
|
||||
#define SENDPACKET_UDP_H 0x8 /* UDP header: 8 bytes */
|
||||
|
||||
/*
|
||||
* Ethernet packet header prototype. Too many O/S's define this differently.
|
||||
* Easy enough to solve that and define it here.
|
||||
*/
|
||||
#ifndef ETHER_ADDR_LEN
|
||||
#define ETHER_ADDR_LEN 6
|
||||
#endif
|
||||
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
|
||||
#define ETHERTYPE_IP 0x0800 /* IP protocol */
|
||||
#define ETHERTYPE_IPv6 0x86dd /* IPv6 protocol */
|
||||
#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */
|
||||
#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */
|
||||
#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */
|
||||
#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */
|
||||
|
||||
//#define ETH_P_8021AD 0x88A8
|
||||
//#define ETHERTYPE_PANGU_MAC_IN_MAC 0x88A8 /* 2018-08-16 lijia add, for pangu MAC-in-MAC */
|
||||
|
||||
|
||||
|
||||
#define ETHERNET_HDR_LEN (14)
|
||||
struct mesa_ethernet_hdr
|
||||
{
|
||||
u_int8_t ether_dhost[ETHER_ADDR_LEN]; /* destination ethernet address */
|
||||
u_int8_t ether_shost[ETHER_ADDR_LEN]; /* source ethernet address */
|
||||
u_int16_t ether_type; /* packet type ID */
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
|
||||
/*
|
||||
* IPv4 packet header prototype.
|
||||
*/
|
||||
#ifndef IP_RF
|
||||
#define IP_RF 0x8000 /* reserved fragment flag */
|
||||
#endif
|
||||
#ifndef IP_DF
|
||||
#define IP_DF 0x4000 /* dont fragment flag */
|
||||
#endif
|
||||
#ifndef IP_MF
|
||||
#define IP_MF 0x2000 /* more fragments flag */
|
||||
#endif
|
||||
#ifndef IP_OFFMASK
|
||||
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
|
||||
#endif
|
||||
|
||||
|
||||
#define IPPROTO_L2TPV3 (115) /* L2TPv3, RFC3931-page17 */
|
||||
|
||||
struct mesa_ip4_hdr
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
u_int8_t ip_hl:4, /* header length */
|
||||
ip_v:4; /* version */
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
u_int8_t ip_v:4, /* version */
|
||||
ip_hl:4; /* header length */
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
u_int8_t ip_tos; /* type of service */
|
||||
u_int16_t ip_len; /* total length */
|
||||
u_int16_t ip_id; /* identification */
|
||||
u_int16_t ip_off;
|
||||
u_int8_t ip_ttl; /* time to live */
|
||||
u_int8_t ip_p; /* protocol */
|
||||
u_int16_t ip_sum; /* checksum */
|
||||
struct in_addr ip_src, ip_dst; /* source and dest address */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* ARP packet header prototype. Too many O/S's define this differently.
|
||||
* Easy enough to solve that and define it here.
|
||||
*/
|
||||
#define ARPOP_REQUEST 1 /* req to resolve address */
|
||||
#define ARPOP_REPLY 2 /* resp to previous request */
|
||||
#define ARPOP_REVREQUEST 3 /* req protocol address given hardware */
|
||||
#define ARPOP_REVREPLY 4 /* resp giving protocol address */
|
||||
#define ARPOP_INVREQUEST 8 /* req to identify peer */
|
||||
#define ARPOP_INVREPLY 9 /* resp identifying peer */
|
||||
|
||||
|
||||
#define ARPHRD_ETHER 1 /* ethernet hardware format */
|
||||
struct mesa_arp_hdr
|
||||
{
|
||||
u_short ar_hrd; /* format of hardware address */
|
||||
|
||||
u_short ar_pro; /* format of protocol address */
|
||||
u_char ar_hln; /* length of hardware address */
|
||||
u_char ar_pln; /* length of protocol addres */
|
||||
u_short ar_op; /* operation type */
|
||||
|
||||
/*
|
||||
* These should implementation defined but I've hardcoded eth/IP.
|
||||
*/
|
||||
u_char ar_sha[6]; /* sender hardware address */
|
||||
u_char ar_spa[4]; /* sender protocol address */
|
||||
u_char ar_tha[6]; /* target hardware address */
|
||||
u_char ar_tpa[4]; /* target protocol address */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* IPv6 packet header prototype, add by LiJia 2012-03-19.
|
||||
*/
|
||||
struct mesa_ip6_hdr
|
||||
{
|
||||
u_int8_t ip6_flags[4]; /* version, traffic-class, flow-label */
|
||||
u_int16_t ip6_payload_len; /* payload length, not contain header */
|
||||
u_int8_t ip6_nxt_hdr; /* next header, same as protocol in IPv4 */
|
||||
u_int8_t ip6_hop; /* hop limit, same as TTL in IPv4 */
|
||||
struct in6_addr ip6_src; /* source address */
|
||||
struct in6_addr ip6_dst; /* dest address */
|
||||
};
|
||||
|
||||
|
||||
struct mesa_icmp_echo_hdr{
|
||||
unsigned char icmp_type;
|
||||
unsigned char icmp_code;
|
||||
unsigned short icmp_cksum;
|
||||
unsigned short icd_id;
|
||||
unsigned short icd_seq;
|
||||
//char echo_data[];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* ICMP packet header prototype. // from libnet-headers.h
|
||||
*/
|
||||
struct mesa_icmp_hdr
|
||||
{
|
||||
u_char icmp_type;
|
||||
/*
|
||||
* ICMP types.
|
||||
*/
|
||||
#ifndef ICMP_ECHOREPLY
|
||||
#define ICMP_ECHOREPLY 0
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH
|
||||
#define ICMP_UNREACH 3
|
||||
#endif
|
||||
#ifndef ICMP_SOURCEQUENCH
|
||||
#define ICMP_SOURCEQUENCH 4
|
||||
#endif
|
||||
#ifndef ICMP_REDIRECT
|
||||
#define ICMP_REDIRECT 5
|
||||
#endif
|
||||
#ifndef ICMP_ECHO
|
||||
#define ICMP_ECHO 8
|
||||
#endif
|
||||
#ifndef ICMP_ROUTERADVERT
|
||||
#define ICMP_ROUTERADVERT 9
|
||||
#endif
|
||||
#ifndef ICMP_ROUTERSOLICIT
|
||||
#define ICMP_ROUTERSOLICIT 10
|
||||
#endif
|
||||
#ifndef ICMP_TIMXCEED
|
||||
#define ICMP_TIMXCEED 11
|
||||
#endif
|
||||
#ifndef ICMP_PARAMPROB
|
||||
#define ICMP_PARAMPROB 12
|
||||
#endif
|
||||
#ifndef ICMP_TSTAMP
|
||||
#define ICMP_TSTAMP 13
|
||||
#endif
|
||||
#ifndef ICMP_TSTAMPREPLY
|
||||
#define ICMP_TSTAMPREPLY 14
|
||||
#endif
|
||||
#ifndef ICMP_IREQ
|
||||
#define ICMP_IREQ 15
|
||||
#endif
|
||||
#ifndef ICMP_IREQREPLY
|
||||
#define ICMP_IREQREPLY 16
|
||||
#endif
|
||||
#ifndef ICMP_MASKREQ
|
||||
#define ICMP_MASKREQ 17
|
||||
#endif
|
||||
#ifndef ICMP_MASKREPLY
|
||||
#define ICMP_MASKREPLY 18
|
||||
#endif
|
||||
u_char icmp_code;
|
||||
/*
|
||||
* ICMP codes.
|
||||
*/
|
||||
#ifndef ICMP_UNREACH_NET
|
||||
#define ICMP_UNREACH_NET 0
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_HOST
|
||||
#define ICMP_UNREACH_HOST 1
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_PROTOCOL
|
||||
#define ICMP_UNREACH_PROTOCOL 2
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_PORT
|
||||
#define ICMP_UNREACH_PORT 3
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_NEEDFRAG
|
||||
#define ICMP_UNREACH_NEEDFRAG 4
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_SRCFAIL
|
||||
#define ICMP_UNREACH_SRCFAIL 5
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_NET_UNKNOWN
|
||||
#define ICMP_UNREACH_NET_UNKNOWN 6
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_HOST_UNKNOWN
|
||||
#define ICMP_UNREACH_HOST_UNKNOWN 7
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_ISOLATED
|
||||
#define ICMP_UNREACH_ISOLATED 8
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_NET_PROHIB
|
||||
#define ICMP_UNREACH_NET_PROHIB 9
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_HOST_PROHIB
|
||||
#define ICMP_UNREACH_HOST_PROHIB 10
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_TOSNET
|
||||
#define ICMP_UNREACH_TOSNET 11
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_TOSHOST
|
||||
#define ICMP_UNREACH_TOSHOST 12
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_FILTER_PROHIB
|
||||
#define ICMP_UNREACH_FILTER_PROHIB 13
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_HOST_PRECEDENCE
|
||||
#define ICMP_UNREACH_HOST_PRECEDENCE 14
|
||||
#endif
|
||||
#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF
|
||||
#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15
|
||||
#endif
|
||||
#ifndef ICMP_REDIRECT_NET
|
||||
#define ICMP_REDIRECT_NET 0
|
||||
#endif
|
||||
#ifndef ICMP_REDIRECT_HOST
|
||||
#define ICMP_REDIRECT_HOST 1
|
||||
#endif
|
||||
#ifndef ICMP_REDIRECT_TOSNET
|
||||
#define ICMP_REDIRECT_TOSNET 2
|
||||
#endif
|
||||
#ifndef ICMP_REDIRECT_TOSHOST
|
||||
#define ICMP_REDIRECT_TOSHOST 3
|
||||
#endif
|
||||
#ifndef ICMP_TIMXCEED_INTRANS
|
||||
#define ICMP_TIMXCEED_INTRANS 0
|
||||
#endif
|
||||
#ifndef ICMP_TIMXCEED_REASS
|
||||
#define ICMP_TIMXCEED_REASS 1
|
||||
#endif
|
||||
#ifndef ICMP_PARAMPROB_OPTABSENT
|
||||
#define ICMP_PARAMPROB_OPTABSENT 1
|
||||
#endif
|
||||
|
||||
u_short icmp_sum;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
u_short id;
|
||||
u_short seq;
|
||||
}echo;
|
||||
|
||||
#undef icmp_id
|
||||
#undef icmp_seq
|
||||
#define icmp_id hun.echo.id
|
||||
#define icmp_seq hun.echo.seq
|
||||
|
||||
u_long gateway;
|
||||
struct
|
||||
{
|
||||
u_short pad;
|
||||
u_short mtu;
|
||||
}frag;
|
||||
}hun;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
n_time its_otime;
|
||||
n_time its_rtime;
|
||||
n_time its_ttime;
|
||||
}ts;
|
||||
struct
|
||||
{
|
||||
struct ip idi_ip;
|
||||
/* options and then 64 bits of data */
|
||||
}ip;
|
||||
u_long mask;
|
||||
char data[1];
|
||||
|
||||
#undef icmp_mask
|
||||
#define icmp_mask dun.mask
|
||||
#undef icmp_data
|
||||
#define icmp_data dun.data
|
||||
|
||||
#undef icmp_otime
|
||||
#define icmp_otime dun.ts.its_otime
|
||||
#undef icmp_rtime
|
||||
#define icmp_rtime dun.ts.its_rtime
|
||||
#undef icmp_ttime
|
||||
#define icmp_ttime dun.ts.its_ttime
|
||||
}dun;
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* TCP packet header prototype.
|
||||
*/
|
||||
#ifndef TH_FIN
|
||||
#define TH_FIN 0x01
|
||||
#endif
|
||||
#ifndef TH_SYN
|
||||
#define TH_SYN 0x02
|
||||
#endif
|
||||
#ifndef TH_RST
|
||||
#define TH_RST 0x04
|
||||
#endif
|
||||
#ifndef TH_PUSH
|
||||
#define TH_PUSH 0x08
|
||||
#endif
|
||||
#ifndef TH_ACK
|
||||
#define TH_ACK 0x10
|
||||
#endif
|
||||
#ifndef TH_URG
|
||||
#define TH_URG 0x20
|
||||
#endif
|
||||
struct mesa_tcp_hdr
|
||||
{
|
||||
u_int16_t th_sport; /* source port */
|
||||
u_int16_t th_dport; /* destination port */
|
||||
u_int32_t th_seq; /* sequence number */
|
||||
u_int32_t th_ack; /* acknowledgement number */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
u_int8_t th_x2:4, /* (unused) */
|
||||
th_off:4; /* data offset */
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
u_int8_t th_off:4, /* data offset */
|
||||
th_x2:4; /* (unused) */
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
u_int8_t th_flags; /* control flags */
|
||||
u_int16_t th_win; /* window */
|
||||
u_int16_t th_sum; /* checksum */
|
||||
u_int16_t th_urp; /* urgent pointer */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* UDP packet header prototype.
|
||||
*/
|
||||
struct mesa_udp_hdr
|
||||
{
|
||||
u_int16_t uh_sport; /* soure port */
|
||||
u_int16_t uh_dport; /* destination port */
|
||||
u_int16_t uh_ulen; /* length */
|
||||
u_int16_t uh_sum; /* checksum */
|
||||
};
|
||||
|
||||
|
||||
#define PPPOE_HDR_LEN (sizeof(struct mesa_pppoe_session_hdr))
|
||||
#define PPP_PROTOCOL_PAD (0x0001)
|
||||
#define PPP_PROTOCOL_IPv4 (0x0021)
|
||||
#define PPP_PROTOCOL_PAP (0xC023)
|
||||
#define PPP_PROTOCOL_CHAP (0xC223)
|
||||
#define PPP_PROTOCOL_IPv6 (0x0057)
|
||||
#define PPP_COMPRESS_DATA (0x00FD)
|
||||
|
||||
#define PPP_PROTOCOL_LCP (0xC021)
|
||||
#define PPP_PROTOCOL_CCP (0x80FD)
|
||||
#define PPP_PROTOCOL_IPCP (0x8021)
|
||||
|
||||
struct mesa_pppoe_session_hdr{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned int ver:4;
|
||||
unsigned int type:4;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned int type:4;
|
||||
unsigned int ver:4;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
unsigned char code;
|
||||
unsigned short session_id;
|
||||
unsigned short len;
|
||||
/* to do:
|
||||
pppӦ<70>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ϊ<>˼<CBBC><F2BBAFB4><EFBFBD>, ǿ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>PPPOE_SES<45><53><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>PPPЭ<50>̹<EFBFBD><CCB9><EFBFBD>, <20>˽ṹ<CBBD><E1B9B9>Ҫ<EFBFBD>Ķ<EFBFBD>.
|
||||
*/
|
||||
unsigned short ppp_protocol;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
|
||||
struct mesa_ppp_hdr{
|
||||
unsigned char address;
|
||||
unsigned char control;
|
||||
unsigned short protocol;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
#define PPP_LCP_CODE_REQUEST (1)
|
||||
#define PPP_LCP_CODE_ACK (2)
|
||||
#define PPP_LCP_CODE_NAK (3)
|
||||
#define PPP_LCP_CODE_REJECT (4)
|
||||
#define PPP_LCP_CODE_TERMINATE_REQ (5)
|
||||
#define PPP_LCP_CODE_TERMINATE_ACK (6)
|
||||
|
||||
/* refer to RFC1661 */
|
||||
#define PPP_LCP_OPT_RESERVED (0)
|
||||
#define PPP_LCP_OPT_MAX_RCV_UNIT (1)
|
||||
#define PPP_LCP_OPT_AUTH_PRO (3)
|
||||
#define PPP_LCP_OPT_QA_PRO (4)
|
||||
#define PPP_LCP_OPT_MAGIC (5)
|
||||
#define PPP_LCP_OPT_PRO_FIELD_COMPRESS (7)
|
||||
#define PPP_LCP_OPT_ADDR_CTRL_FIELD_COMPRESS (8)
|
||||
|
||||
#define PPP_LCP_OPT_AUTH_PRO_PAP (0xC023)
|
||||
#define PPP_LCP_OPT_AUTH_PRO_CHAP (0xC223)
|
||||
|
||||
#define PPP_LCP_OPT_AUTH_PRO_CHAP_ALGO_MS_CHAP_V2 (0x81)
|
||||
#define PPP_LCP_OPT_AUTH_PRO_CHAP_ALGO_CHAP_MD5 (0x05)
|
||||
|
||||
|
||||
/* refer to RFC1962 Page6 */
|
||||
#define PPP_CCP_OPT_OUI (0)
|
||||
#define PPP_CCP_OPT_MS_PPC (18)
|
||||
|
||||
struct mesa_ppp_lcp_ack_hdr{ /* RFC1661-Page29 */
|
||||
unsigned char code;
|
||||
unsigned char identifier;
|
||||
unsigned short length;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
struct mesa_ppp_ccp_ack_hdr{ /* RFC1661-Page29 */
|
||||
unsigned char code;
|
||||
unsigned char identifier;
|
||||
unsigned short length;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
#define PPP_CHAP_CHALLENGE (1)
|
||||
#define PPP_CHAP_RESPONSE (2)
|
||||
#define PPP_CHAP_SUCCESS (3)
|
||||
#define PPP_CHAP_FAILURE (4)
|
||||
|
||||
struct mesa_ppp_chap_hdr{
|
||||
unsigned char code;
|
||||
unsigned char identifier;
|
||||
unsigned short length;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
struct mesa_ppp_ipcp_ack_hdr{
|
||||
unsigned char code;
|
||||
unsigned char identifier;
|
||||
unsigned short length;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
enum pptp_control_message_type{
|
||||
PPTP_CTRL_START_CONN_REQ = 1,
|
||||
PPTP_CTRL_START_CONN_REPLY = 2,
|
||||
PPTP_CTRL_STOP_CONN_REQ = 3,
|
||||
PPTP_CTRL_STOP_CONN_REPLY = 4,
|
||||
PPTP_CTRL_ECHO_REQ = 5,
|
||||
PPTP_CTRL_ECHO_REPLY = 6,
|
||||
PPTP_CTRL_OUT_GO_REQ = 7,
|
||||
PPTP_CTRL_OUT_GO_REPLY = 8,
|
||||
PPTP_CTRL_IN_CALL_REQ = 9,
|
||||
PPTP_CTRL_IN_CALL_REPLY = 10,
|
||||
PPTP_CTRL_IN_CALL_CONN = 11,
|
||||
PPTP_CTRL_CALL_CLEAR_REQ = 12,
|
||||
PPTP_CTRL_CALL_DISCONN_NOTIFY = 13,
|
||||
PPTP_CTRL_WAN_ERROR_NOTIFY = 14,
|
||||
PPTP_CTRL_SET_LINK_INFO = 15,
|
||||
};
|
||||
|
||||
struct mesa_pptp_control_hdr{
|
||||
unsigned short length; /* ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7> */
|
||||
unsigned short pptp_message_type;
|
||||
unsigned int magic_cookie;
|
||||
unsigned short control_message_type;
|
||||
char ignore_bytes[0]; /* <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>һ<EFBFBD><D2BB> */
|
||||
};
|
||||
|
||||
struct mesa_vlan_hdr{
|
||||
unsigned short pri_cfi_id;
|
||||
unsigned short type;
|
||||
};
|
||||
|
||||
struct mesa_vlan_detail_hdr{
|
||||
unsigned char vlan_id_high:4;
|
||||
unsigned char del_flag:1;
|
||||
unsigned char priority:3;
|
||||
unsigned char vlan_id_low;
|
||||
unsigned short type;
|
||||
};
|
||||
|
||||
/* 2018-08-28 lijia add, for pangu <20><>Ŀmac_in_mac<61><63><EFBFBD><EFBFBD> */
|
||||
struct mesa_mac_in_mac_net_hdr{
|
||||
unsigned int route_dir:1;
|
||||
unsigned int link_id:3;
|
||||
unsigned int dev_id:6;
|
||||
unsigned int region_id:5;
|
||||
unsigned int __pad1:1;
|
||||
unsigned int encap_type:4;
|
||||
unsigned int __pad2:20;
|
||||
unsigned int __pad3:8;
|
||||
};
|
||||
|
||||
|
||||
#define GRE_PRO_IPV4 (0x0800)
|
||||
#define GRE_PRO_IPV6 (0x86DD)
|
||||
#define GRE_PRO_ARP (0x0806)
|
||||
#define GRE_PRO_PPP (0x880B)
|
||||
|
||||
struct mesa_gre_base_hdr_v0{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char recur:3;
|
||||
unsigned char strict_src_route_flag:1;
|
||||
unsigned char seq_flag:1;
|
||||
unsigned char key_flag:1;
|
||||
unsigned char route_flag:1;
|
||||
unsigned char checksum_flag:1;
|
||||
|
||||
unsigned char version:3;
|
||||
unsigned char flags:5; /* version 0 flags is 5 bit */
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char checksum_flag:1;
|
||||
unsigned char route_flag:1;
|
||||
unsigned char key_flag:1;
|
||||
unsigned char seq_flag:1;
|
||||
unsigned char strict_src_route_flag:1;
|
||||
unsigned char recur:3;
|
||||
|
||||
unsigned char flags:5; /* version 0 flags is 5 bit */
|
||||
unsigned char version:3;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
unsigned short protocol;
|
||||
};
|
||||
|
||||
struct mesa_gre_base_hdr_v1{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char recur:3;
|
||||
unsigned char strict_src_route_flag:1;
|
||||
unsigned char seq_flag:1;
|
||||
unsigned char key_flag:1;
|
||||
unsigned char route_flag:1;
|
||||
unsigned char checksum_flag:1;
|
||||
|
||||
unsigned char version:3;
|
||||
unsigned char flags:4; /* version 1 flags is 4 bit */
|
||||
unsigned char ack_flag:1;
|
||||
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char checksum_flag:1;
|
||||
unsigned char route_flag:1;
|
||||
unsigned char key_flag:1;
|
||||
unsigned char seq_flag:1;
|
||||
unsigned char strict_src_route_flag:1;
|
||||
unsigned char recur:3;
|
||||
|
||||
unsigned char ack_flag:1;
|
||||
unsigned char flags:4; /* version 1 flags is 4 bit */
|
||||
unsigned char version:3;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
unsigned short protocol;
|
||||
};
|
||||
|
||||
#define GRE_SRE_MAX_LEN (256) /* <20><><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD>ֽ<EFBFBD>, 256 */
|
||||
struct gre_source_route_entry_hdr{
|
||||
unsigned short address_family;
|
||||
unsigned char sre_offset;
|
||||
unsigned char sre_length;
|
||||
unsigned char sre_entry_list[GRE_SRE_MAX_LEN];
|
||||
};
|
||||
|
||||
/* <20><><EFBFBD>п<EFBFBD><D0BF>ܵ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>, <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>mesa_gre_base_hdr<64><72><EFBFBD><EFBFBD>bit<69><74>ֵ, <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
||||
struct mesa_gre_extend_hdr{
|
||||
unsigned short checksum; //version0
|
||||
unsigned short offset; //version0, if checksum present, then offset also present
|
||||
unsigned short payload_len; //version1
|
||||
unsigned short call_id; //version1
|
||||
unsigned int key; //version0
|
||||
unsigned int seq_num; //version0 and version1
|
||||
unsigned int ack_num; //version1
|
||||
//struct gre_source_route_entry_hdr sre_list;
|
||||
};
|
||||
|
||||
struct mesa_gre_hdr{
|
||||
/* version0<6E><30>version1<6E><31>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>, version<6F>ֶ<EFBFBD>ʱһ<CAB1>µ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>, Ĭ<><C4AC>ʹ<EFBFBD><CAB9>v0<76><30>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> */
|
||||
struct mesa_gre_base_hdr_v0 gre_base;
|
||||
struct mesa_gre_extend_hdr gre_extend;
|
||||
};
|
||||
|
||||
|
||||
#define MPLS_LABEL_MASK (0xFFFFF000)
|
||||
#define MPLS_EXP_MASK (0x00000E00)
|
||||
#define MPLS_BLS_MASK (0x00000100)
|
||||
#define MPLS_TTL_MASK (0x000000FF)
|
||||
struct mesa_mpls_hdr{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char mpls_label_low;
|
||||
unsigned char mpls_label_mid;
|
||||
unsigned char mpls_bls:1; /* bottom of label stack */
|
||||
unsigned char mpls_exp:3;
|
||||
unsigned char mpls_label_high:4;
|
||||
unsigned char mpls_ttl;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char mpls_ttl;
|
||||
unsigned char mpls_label_high:4;
|
||||
unsigned char mpls_exp:3;
|
||||
unsigned char mpls_bls:1; /* bottom of label stack */
|
||||
unsigned short mpls_label_low;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
};
|
||||
|
||||
#define L2TP_REGISTERED_IP_PRO (115)
|
||||
#define L2TP_REGISTERED_PORT (1701)
|
||||
|
||||
#define L2TP_HDR_TYPE_DATA (0)
|
||||
#define L2TP_HDR_TYPE_CONTROL (1)
|
||||
|
||||
struct l2tp_hdr_v2{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char priority:1;
|
||||
unsigned char offset_present:1;
|
||||
unsigned char reserved2:1;
|
||||
unsigned char seq_present:1;
|
||||
unsigned char reserved1:2;
|
||||
unsigned char length_present:1;
|
||||
unsigned char type:1;
|
||||
|
||||
unsigned char version:4;
|
||||
unsigned char reserved3:4;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char reserved3:4;
|
||||
unsigned char version:4;
|
||||
|
||||
unsigned char type:1;
|
||||
unsigned char length_present:1;
|
||||
unsigned char reserved1:2;
|
||||
unsigned char seq_present:1;
|
||||
unsigned char reserved2:1;
|
||||
unsigned char offset_present:1;
|
||||
unsigned char priority:1;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
};
|
||||
|
||||
/* refer to RFC2661-Page12 */
|
||||
#define L2TP_CTRL_MSG_RESERVED0 (0)
|
||||
#define L2TP_CTRL_MSG_SCCRQ (1)
|
||||
#define L2TP_CTRL_MSG_SCCRP (2)
|
||||
#define L2TP_CTRL_MSG_SCCCN (3)
|
||||
#define L2TP_CTRL_MSG_STOP_CCN (4)
|
||||
#define L2TP_CTRL_MSG_RESERVED5 (5)
|
||||
#define L2TP_CTRL_MSG_HELLO (6)
|
||||
#define L2TP_CTRL_MSG_OCRQ (7)
|
||||
#define L2TP_CTRL_MSG_OCRP (8)
|
||||
#define L2TP_CTRL_MSG_OCCN (9)
|
||||
#define L2TP_CTRL_MSG_ICRQ (10)
|
||||
#define L2TP_CTRL_MSG_ICRP (11)
|
||||
#define L2TP_CTRL_MSG_ICCN (12)
|
||||
#define L2TP_CTRL_MSG_RESERVED13 (13)
|
||||
#define L2TP_CTRL_MSG_CDN (14)
|
||||
#define L2TP_CTRL_MSG_WEN (15)
|
||||
#define L2TP_CTRL_MSG_SLI (16)
|
||||
|
||||
#define L2TP_AVP_GET_LEN(u) (ntohs(u) & 0x3F)
|
||||
struct l2tp_avp{
|
||||
unsigned short M_H_rsvd_len_union;
|
||||
unsigned short vendor_id;
|
||||
unsigned short attribute_type;
|
||||
}BYTE_ALIGNED(1);
|
||||
|
||||
/* RFC2408-Page23 */
|
||||
#define ISAKMP_PAYLOAD_TYPE_NONE (0)
|
||||
#define ISAKMP_PAYLOAD_TYPE_SA (1)
|
||||
#define ISAKMP_PAYLOAD_TYPE_PROPOSAL (2)
|
||||
#define ISAKMP_PAYLOAD_TYPE_TRANSFORM (3)
|
||||
#define ISAKMP_PAYLOAD_TYPE_KEY_EXCHANGE (4)
|
||||
#define ISAKMP_PAYLOAD_TYPE_ID (5)
|
||||
#define ISAKMP_PAYLOAD_TYPE_CERT (6)
|
||||
#define ISAKMP_PAYLOAD_TYPE_CR (7)
|
||||
#define ISAKMP_PAYLOAD_TYPE_HASH (8)
|
||||
#define ISAKMP_PAYLOAD_TYPE_SIG (9)
|
||||
#define ISAKMP_PAYLOAD_TYPE_NONCE (10)
|
||||
#define ISAKMP_PAYLOAD_TYPE_NOTIFY (11)
|
||||
#define ISAKMP_PAYLOAD_TYPE_DELETE (12)
|
||||
#define ISAKMP_PAYLOAD_TYPE_VENDOR_ID (13)
|
||||
#define ISAKMP_PAYLOAD_TYPE_RESERVED_BEGIN (14) /* 14 - 127 */
|
||||
#define ISAKMP_PAYLOAD_TYPE_RESERVED_END (127) /* 14 - 127 */
|
||||
#define ISAKMP_PAYLOAD_TYPE_PRIVATE_USE_BEGIN (128) /* 128-255 */
|
||||
#define ISAKMP_PAYLOAD_TYPE_PRIVATE_USE_END (255) /* 128-255 */
|
||||
|
||||
/* RFC2408-Page23 */
|
||||
#define ISAKMP_EXCHANGE_TYPE_NONE (0)
|
||||
#define ISAKMP_EXCHANGE_TYPE_BASE (1)
|
||||
#define ISAKMP_EXCHANGE_TYPE_ID_PROT (2) /* RFC-2409 page8, main mode is instantiation os ISAKMP Identity Protect Exchange */
|
||||
#define ISAKMP_EXCHANGE_TYPE_AUTH (3)
|
||||
#define ISAKMP_EXCHANGE_TYPE_AGGRESS (4)/* RFC-2409 page8, Aggressive mode is instantiation os ISAKMP Aggressive Exchange */
|
||||
#define ISAKMP_EXCHANGE_TYPE_INFO (5)
|
||||
#define ISAKMP_EXCHANGE_TYPE_FEATURE_USE_BEGIN (6) /* 6-31<33><31>ֵ<EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define ISAKMP_EXCHANGE_TYPE_FEATURE_USE_END (31) /* 6-31<33><31>ֵ<EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD> */
|
||||
|
||||
struct mesa_isakmp_hdr{ /* RFC2408-Page22 */
|
||||
unsigned long long init_cookie;
|
||||
unsigned long long resp_cookie;
|
||||
unsigned char next_payload;
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char minor_version:4;
|
||||
unsigned char major_version:4;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char major_version:4;
|
||||
unsigned char minor_version:4;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
|
||||
unsigned char exchange_type;
|
||||
unsigned char flags;
|
||||
unsigned int message_id;
|
||||
unsigned int length;
|
||||
};
|
||||
|
||||
struct mesa_isakmp_payload_hdr{ /* RFC2408-Page22 */
|
||||
unsigned char next_payload;
|
||||
unsigned char reserver;
|
||||
unsigned short payload_len;
|
||||
};
|
||||
|
||||
#define GTP_MSG_TYPE_T_PDU (0xFF)
|
||||
|
||||
#define GTP_HDR_VER_MASK (0xE0)
|
||||
|
||||
#define GTP_HDR_FLAG_NEXT_EXT_HDR (0x04)
|
||||
#define GTP_HDR_FLAG_SEQ_NUM (0x02)
|
||||
#define GTP_HDR_FLAG_N_PDU (0x01)
|
||||
|
||||
|
||||
struct gtp_hdr{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned char flags;
|
||||
unsigned char msg_type;
|
||||
unsigned short len;
|
||||
unsigned int teid;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned int teid;
|
||||
unsigned short len;
|
||||
unsigned char msg_type;
|
||||
unsigned char flags;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
};
|
||||
|
||||
#define TEREDO_AUTH_HDR_FLAG (0x0001)
|
||||
#define TEREDO_INDICATION_HDR_FLAG (0x0000)
|
||||
|
||||
#define TEREDO_INDICATION_HDR_LEN (8)
|
||||
|
||||
struct teredo_auth_hdr{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
unsigned short flags;
|
||||
unsigned char id_len;
|
||||
unsigned char au_len;
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
unsigned char au_len;
|
||||
unsigned char id_len;
|
||||
unsigned short flags;
|
||||
#else
|
||||
#error "Please check <endian.h>"
|
||||
#endif
|
||||
};
|
||||
|
||||
#define MAX_ADDR_TYPE_STRING_LEN (64)
|
||||
#define MAX_ADDR_LIST_STRING_LEN (2048)
|
||||
#define MAX_ADDR_EMBED_LAYER_NUM (20) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַǶ<D6B7>ײ<EFBFBD><D7B2><EFBFBD> */
|
||||
#define MAX_ADDR_BIN_VALUE_LEN (40) /* paddrʵ<72><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ŀǰ<C4BF><C7B0>tuple4v6<76> */
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>, <20><>¼MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD> */
|
||||
struct packet_io_mac_addr{
|
||||
struct mesa_ethernet_hdr eth_hdr;
|
||||
char route_dir;
|
||||
char __pad__; /* <20><><EFBFBD><EFBFBD><EFBFBD>ṹ8<E1B9B9>ֽڶ<D6BD><DAB6><EFBFBD> */
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct hdlc_net_hdr{
|
||||
unsigned char address;
|
||||
unsigned char control;
|
||||
unsigned short protocol; /* network order */
|
||||
}__attribute__((packed));
|
||||
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>, <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, network order */
|
||||
#define VXLAN_KEEPALIVE_PKT_PORT (3784)
|
||||
#define VXLAN_OVERLAY_PKT_PORT (4789)
|
||||
|
||||
|
||||
typedef enum{
|
||||
VXLAN_ENCAP_ETH = 0x0,
|
||||
VXLAN_ENCAP_PPP = 0x8,
|
||||
VXLAN_ENCAP_HDLC = 0xC,
|
||||
}vxlan_encap_type_t;
|
||||
|
||||
struct __inline_vxlan_hdr{
|
||||
unsigned char flags;
|
||||
unsigned char reserved[3];
|
||||
/*--------int delim -------*/
|
||||
unsigned char vlan_id_half_high;
|
||||
unsigned char link_layer_type : 4; /* <20><><EFBFBD>㱨<EFBFBD>ķ<EFBFBD>װ<EFBFBD><D7B0>ʽ */
|
||||
unsigned char vlan_id_half_low : 4;
|
||||
|
||||
unsigned int dir : 1;
|
||||
unsigned int link_id : 6;
|
||||
unsigned int online_test : 1;
|
||||
|
||||
unsigned int r7 : 1;
|
||||
unsigned int r6 : 1;
|
||||
unsigned int r5 : 1;
|
||||
unsigned int r4 : 1;
|
||||
unsigned int vni_flag : 1;
|
||||
unsigned int r2 : 1;
|
||||
unsigned int r1 : 1;
|
||||
unsigned int r0 : 1;
|
||||
}__attribute__((packed));
|
||||
typedef struct __inline_vxlan_hdr inline_vxlan_hdr_t;
|
||||
|
||||
|
||||
|
||||
unsigned char net_layer_to_ipv4_protocol(int addr_type);
|
||||
unsigned char net_layer_to_ipv6_protocol(int addr_type);
|
||||
unsigned short net_layer_to_ethernet_protocol(int addr_type);
|
||||
UINT16 net_layer_to_ethernet_protocol_by_stream(const struct streaminfo *pstream);
|
||||
enum addr_type_t ethernet_protocol_to_net_layer(UINT16 ether_type_host);
|
||||
int net_common_build_send_mac(unsigned char *buf, const struct mesa_ethernet_hdr *raw_eth_hdr, int addr_type, int dir_reverse, int net_topology_mode);
|
||||
int net_common_adjust_forward_mac(struct mesa_ethernet_hdr *raw_eth_hdr,int net_topology_mode);
|
||||
const void *MESA_net_jump_to_layer(const void *raw_data, int raw_layer_type, int expect_layer_type);
|
||||
const void *MESA_net_jump_to_layer_greedy(const void *raw_data, int raw_layer_type, int expect_layer_type);
|
||||
char MESA_ascii_to_hex(char ascii);
|
||||
const char *sapp_raw_ipv4_ntop(const struct mesa_ip4_hdr *ip4_hdr, char *out_buf, int buf_len );
|
||||
const char *sapp_raw_ipv6_ntop(const struct mesa_ip6_hdr *ip6_hdr, char *out_buf, int buf_len);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
2
test/Makefile
Normal file
2
test/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
test_jump_layer:test_jump_layer.c
|
||||
gcc -g -o $@ test_jump_layer.c -D_GNU_SOURCE -L/opt/MESA/lib -lMESA_jump_layer -I ../inc -I/opt/MESA/include/MESA -l pcap
|
||||
153
test/test_jump_layer.c
Normal file
153
test/test_jump_layer.c
Normal file
@@ -0,0 +1,153 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <getopt.h>
|
||||
#include <pcap/pcap.h>
|
||||
#include "MESA_jump_layer.h"
|
||||
|
||||
static pcap_t *g_pcap_handle;
|
||||
static char *g_input_pcap_name;
|
||||
static char *g_input_bpf_string;
|
||||
static struct bpf_program g_bpf_filter;
|
||||
|
||||
static void usage(const char *prog)
|
||||
{
|
||||
printf("Usage:\n");
|
||||
printf("\t-r set input pcap file.\n");
|
||||
printf("\t-f set pcap BPF fileter.\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static int pcap_set_bpf(pcap_t *handle, const char *filter_str)
|
||||
{
|
||||
struct bpf_program bpf_filter;
|
||||
|
||||
if((NULL == handle) || (NULL == filter_str) || ('\0' == *filter_str)){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(pcap_compile(handle, &bpf_filter, (char *)filter_str, 1, 0) < 0)
|
||||
{
|
||||
printf("Compile pcap filter '%s' error:%s\n", filter_str, pcap_geterr(handle));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(pcap_setfilter(handle, &bpf_filter) < 0){
|
||||
printf("Set pcap filter '%s' error:%s\n", filter_str, pcap_geterr(handle));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pcap_init(void)
|
||||
{
|
||||
char err_string[PCAP_ERRBUF_SIZE];
|
||||
|
||||
g_pcap_handle = pcap_open_offline(g_input_pcap_name, err_string);
|
||||
if(NULL == g_pcap_handle){
|
||||
printf("open file:%s error, %s\n", g_input_pcap_name, err_string);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(pcap_compile_nopcap(65535, DLT_RAW, &g_bpf_filter, g_input_bpf_string, 1, 0) < 0){
|
||||
printf("Compile pcap filter '%s' error\n", g_input_bpf_string);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void _pcap_pkt_handle(u_char *user, const struct pcap_pkthdr *hdr, const u_char *data)
|
||||
{
|
||||
const void *ip4_hdr, *ip6_h;
|
||||
char print_buf[128];
|
||||
int offset_to_eth;
|
||||
static int pkt_index = 0;
|
||||
|
||||
ip4_hdr = MESA_net_jump_to_layer_greedy(data, ADDR_TYPE_MAC, ADDR_TYPE_IPV4);
|
||||
ip6_h = MESA_net_jump_to_layer_greedy(data, ADDR_TYPE_MAC, ADDR_TYPE_IPV6);
|
||||
|
||||
printf("-----------------------------packet index:%d------------------------------------------\n", pkt_index++);
|
||||
if(ip4_hdr){
|
||||
offset_to_eth = (u_char *)ip4_hdr-data;
|
||||
if(g_input_bpf_string
|
||||
&& (0 == bpf_filter(g_bpf_filter.bf_insns, (const unsigned char *)ip4_hdr, hdr->caplen-offset_to_eth, hdr->caplen-offset_to_eth))){
|
||||
goto done;
|
||||
}
|
||||
printf("Innermost layer ipv4 offset:%d, addr: %s\n", offset_to_eth, MESA_jump_layer_ipv4_ntop((struct ip *)ip4_hdr, print_buf, sizeof(print_buf)));
|
||||
}
|
||||
|
||||
if(ip6_h){
|
||||
offset_to_eth = (u_char *)ip6_h-data;
|
||||
if(g_input_bpf_string
|
||||
&& (0 == bpf_filter(g_bpf_filter.bf_insns, (const unsigned char *)ip6_h, hdr->caplen-offset_to_eth, hdr->caplen-offset_to_eth))){
|
||||
goto done;
|
||||
}
|
||||
|
||||
printf("Innermost layer ipv6 offset:%d, addr: %s\n", offset_to_eth, MESA_jump_layer_ipv6_ntop((struct ip6_hdr *)ip6_h, print_buf, sizeof(print_buf)));
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
printf("--------------------------------------------------------------------------------------\n\n");
|
||||
}
|
||||
|
||||
static void pcap_run(void)
|
||||
{
|
||||
|
||||
pcap_loop(g_pcap_handle, -1, _pcap_pkt_handle, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret, c, opt_index;
|
||||
|
||||
while(1){
|
||||
c = getopt_long(argc, argv, "hr:f:", NULL, &opt_index);
|
||||
if(c == -1){
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
switch(c){
|
||||
case 'h':
|
||||
usage(argv[0]);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
g_input_pcap_name = strdup(optarg);
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
g_input_bpf_string = strdup(optarg);
|
||||
break;
|
||||
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if(NULL == g_input_pcap_name){
|
||||
printf("error! must set pcap file name use -r\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(NULL == g_input_bpf_string){
|
||||
printf("you can set BPF filter use -f\n");
|
||||
}
|
||||
|
||||
if(pcap_init() < 0){
|
||||
return -1;
|
||||
}
|
||||
|
||||
pcap_run();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user