12 Commits

Author SHA1 Message Date
lijia
10330f034e fix jump greedy for ipv6; fix compile warnning 2024-04-18 15:41:55 +08:00
yangwei
71a6040f8a 🐞 fix(__mjl_gtp_calc_gtp_hdr_len): 修复长度计算超过包长的错误 2023-07-24 00:14:45 +08:00
yangwei
0c02227c58 🐞 fix(l2tp偏移长度计算时,增加长度判断): 2023-07-23 20:45:16 +08:00
yangwei
320851f683 🐞 fix(gtp计算头部): 计算GTP头部扩展时判断长度 2023-07-23 11:10:15 +08:00
liuxueli
6fb4738f19 TSG-9690: 适配Rocky Linux8.5,修复rpm名称不正确的问题 2022-03-15 14:56:21 +08:00
刘学利
5a89ccb0da TSG-9690: 适配Rocky Linux8.5 2022-03-15 06:40:04 +00:00
lijia
1b30b6d6a2 TSG-8372, 增加三层vlan 自测试用例. 2021-11-08 16:03:29 +08:00
lijia
e1bf15c222 TSG-8372, 修复不支持三层vlan跳转. 2021-11-08 14:19:37 +08:00
lijia
e683d478a8 修复CI编译错误. 2021-10-29 11:41:09 +08:00
lijia
7a0b7d2316 修复CI编译错误. 2021-10-29 11:10:32 +08:00
lijia
004a1d3b00 修复CI编译错误. 2021-10-29 10:28:22 +08:00
lijia
86ccc7b43a 修复CI编译错误. 2021-10-29 10:02:19 +08:00
9 changed files with 379 additions and 67 deletions

View File

@@ -1,16 +1,18 @@
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/
BUILD_IMAGE_CENTOS7: "git.mesalab.cn:7443/mesa_platform/build-env:master"
BUILD_IMAGE_CENTOS8: "git.mesalab.cn:7443/mesa_platform/build-env:rockylinux"
INSTALL_DEPENDENCY_LIBRARY: sapp-devel framework_env libpcap libpcap-devel
INSTALL_PREFIX: "/opt/MESA/lib/"
INSTALL_DEPENDENCY_LIBRARY: sapp-devel framework_env libpcap libpcap-devel
stages:
- build
- test
google_test:
google_test_for_centos7:
stage: test
image: $BUILD_IMAGE_CENTOS7
script:
- cp -r test/sample_pcap /tmp
- ulimit -c 0
@@ -21,25 +23,75 @@ google_test:
- ldconfig
- cd /tmp
- ./gtest_jump_layer
dependencies:
- branch_build_debug_for_centos7
- branch_build_release_for_centos7
- develop_build_debug_for_centos7
- develop_build_release_for_centos7
- release_build_debug_for_centos7
- release_build_release_for_centos7
tags:
- share
.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
google_test_for_centos8:
stage: test
image: $BUILD_IMAGE_CENTOS8
script:
- yum makecache
- ./ci/travis.sh
- cd build
- cp -r test/sample_pcap /tmp
- ulimit -c 0
- cp /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer /tmp/
- mkdir -p /opt/MESA/lib
- cp /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so /opt/MESA/lib/
- echo "/opt/MESA/lib" >> /etc/ld.so.conf
- ldconfig
- cd /tmp
- ./gtest_jump_layer
dependencies:
- branch_build_debug_for_centos8
- branch_build_release_for_centos8
- develop_build_debug_for_centos8
- develop_build_release_for_centos8
- release_build_debug_for_centos8
- release_build_release_for_centos8
tags:
- share
- share
branch_build_debug:
.build_before_script:
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
- sed -i 's/\/8\//\/7\//g' /etc/yum.repos.d/repo.internal.geedge.net.repo
- yum makecache
- chmod +x ./ci/travis.sh
- yum install -y elfutils-libelf-devel
.build_by_travis_for_centos7:
stage: build
extends: .build_by_travis
image: $BUILD_IMAGE_CENTOS7
extends: .build_before_script
script:
- yum install -y libmnl-devel
- yum install -y libnfnetlink-devel
- ./ci/travis.sh
tags:
- share
.build_by_travis_for_centos8:
stage: build
image: $BUILD_IMAGE_CENTOS8
extends: .build_before_script
script:
- dnf --enablerepo=powertools install -y libmnl-devel
- dnf --enablerepo=powertools install -y libnfnetlink-devel
- ./ci/travis.sh
tags:
- share
branch_build_debug_for_centos7:
stage: build
extends: .build_by_travis_for_centos7
variables:
BUILD_TYPE: Debug
artifacts:
@@ -51,11 +103,11 @@ branch_build_debug:
- /^master.*$/i
- tags
branch_build_release:
branch_build_release_for_centos7:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
extends: .build_by_travis
extends: .build_by_travis_for_centos7
artifacts:
paths:
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
@@ -65,9 +117,9 @@ branch_build_release:
- /^master.*$/i
- tags
develop_build_debug:
develop_build_debug_for_centos7:
stage: build
extends: .build_by_travis
extends: .build_by_travis_for_centos7
variables:
BUILD_TYPE: Debug
PACKAGE: 1
@@ -77,7 +129,7 @@ develop_build_debug:
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"
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-debug"
paths:
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
@@ -86,9 +138,9 @@ develop_build_debug:
- /^develop.*$/i
- /^master.*$/i
develop_build_release:
develop_build_release_for_centos7:
stage: build
extends: .build_by_travis
extends: .build_by_travis_for_centos7
variables:
BUILD_TYPE: RelWithDebInfo
PACKAGE: 1
@@ -98,7 +150,7 @@ develop_build_release:
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"
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
@@ -107,7 +159,7 @@ develop_build_release:
- /^develop.*$/i
- /^master.*$/i
release_build_debug:
release_build_debug_for_centos7:
stage: build
variables:
BUILD_TYPE: Debug
@@ -115,9 +167,9 @@ release_build_debug:
UPLOAD_RPM: 1
PULP3_REPO_NAME: framework-stable-x86_64.el7
PULP3_DIST_NAME: framework-stable-x86_64.el7
extends: .build_by_travis
extends: .build_by_travis_for_centos7
artifacts:
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-debug"
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
@@ -125,7 +177,7 @@ release_build_debug:
only:
- tags
release_build_release:
release_build_release_for_centos7:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
@@ -135,12 +187,120 @@ release_build_release:
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
extends: .build_by_travis_for_centos7
artifacts:
name: MESA_jump_layer-$CI_COMMIT_REF_NAME-release"
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
only:
- tags
branch_build_debug_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: Debug
artifacts:
paths:
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
except:
- /^develop.*$/i
- /^master.*$/i
- tags
branch_build_release_for_centos8:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
extends: .build_by_travis_for_centos8
artifacts:
paths:
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
except:
- /^develop.*$/i
- /^master.*$/i
- tags
develop_build_debug_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: Debug
PACKAGE: 1
UPLOAD_RPM: 1
ASAN_OPTION: ADDRESS
TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el8
PULP3_DIST_NAME: framework-testing-x86_64.el8
artifacts:
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-debug"
paths:
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
- build/*.rpm
only:
- /^develop.*$/i
- /^master.*$/i
develop_build_release_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: RelWithDebInfo
PACKAGE: 1
UPLOAD_RPM: 1
ASAN_OPTION: "OFF"
TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el8
PULP3_DIST_NAME: framework-testing-x86_64.el8
artifacts:
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
only:
- /^develop.*$/i
- /^master.*$/i
release_build_debug_for_centos8:
stage: build
variables:
BUILD_TYPE: Debug
PACKAGE: 1
UPLOAD_RPM: 1
PULP3_REPO_NAME: framework-stable-x86_64.el8
PULP3_DIST_NAME: framework-stable-x86_64.el8
extends: .build_by_travis_for_centos8
artifacts:
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
only:
- tags
release_build_release_for_centos8:
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.el8
PULP3_DIST_NAME: framework-stable-x86_64.el8
extends: .build_by_travis_for_centos8
artifacts:
name: libMESA_jump_layer-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
- /builds/MESA_framework/mesa_jump_layer/build/test/gtest_jump_layer
- /builds/MESA_framework/mesa_jump_layer/build/src/libMESA_jump_layer.so
only:
- tags

View File

@@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 2.8)
cmake_minimum_required (VERSION 2.8...3.10)
set(lib_name MESA_jump_layer)
@@ -38,8 +38,6 @@ add_subdirectory(./vendor)
add_subdirectory(./src)
add_subdirectory(./test)
#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)

View File

@@ -37,7 +37,7 @@ if [ -n "${INSTALL_DEPENDENCY_LIBRARY}" ]; then
yum install -y $INSTALL_DEPENDENCY_LIBRARY
fi
if [ $ASAN_OPTION ];then
if [ $ASAN_OPTION ] && [ -f "/opt/rh/devtoolset-7/enable" ] ;then
source /opt/rh/devtoolset-7/enable
fi

View File

@@ -12,38 +12,37 @@ 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_AUTO_GENERATED_FILE_NAME ON)
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_VENDOR "MESA")
set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes")
set(CPACK_RPM_PACKAGE_RELEASE_LIBRARY "on")
set(CPACK_RPM_PACKAGE_RELEASE_DIST "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_LIBRARIES_REQUIRED TRUE)
set(CPACK_RPM_LIBRARIES_PACKAGE_NAME ${MY_RPM_NAME_PREFIX})
set(CPACK_COMPONENT_PROFILE_GROUP "LIBRARIES")
set(CPACK_COMPONENT_LIBRARIES_GROUP "LIBRARIES")
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_COMPONENT_HEADER_GROUP "HEADER")
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_REQUIRES_PRE ${CPACK_RPM_LIBRARIES_PACKAGE_NAME})
set(CPACK_RPM_HEADER_PACKAGE_CONFLICTS ${CPACK_RPM_HEADER_PACKAGE_NAME})
set(CPACK_COMPONENTS_ALL LIBRARY HEADER)
set(CPACK_COMPONENTS_ALL HEADER PROFILE LIBRARIES)
set(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
set(CPACK_RPM_PACKAGE_AUTOREQ "no")
set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8)
cmake_minimum_required(VERSION 2.8...3.10)
set(MESA_SDK_PREFIX "/opt/MESA" CACHE STRING "MESA Framework Prefix")
@@ -11,15 +11,27 @@ include_directories(${PROJECT_SOURCE_DIR}/include/)
LINK_DIRECTORIES(/opt/MESA/lib)
add_definitions(-D_BSD_SOURCE -D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
#add_definitions(-D_BSD_SOURCE -D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
add_definitions(-D_DEFAULT_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
add_definitions(-DSAPP_V4=1)
add_definitions(-fPIC)
add_definitions(-std=c++11)
add_library(${lib_name} SHARED MESA_jump_layer.cpp)
target_link_libraries(${lib_name} m)
set(SRC MESA_jump_layer.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(FILES ${CMAKE_BINARY_DIR}/src/libMESA_jump_layer.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib COMPONENT LIBRARY)
target_link_libraries(${lib_name}_shared m)
install(TARGETS ${lib_name}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib COMPONENT LIBRARIES)
#install(FILES ${CMAKE_BINARY_DIR}/src/libMESA_jump_layer.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib COMPONENT LIBRARIES)
include(Package)

View File

@@ -211,6 +211,15 @@ static int __mjl_gtp_calc_gtp_hdr_len(const struct gtp_hdr *gtph)
return -1;
}
if(gtph->msg_type != 0xFF){
return -1;
}
if(ntohs(gtph->len) > 1460 || ntohs(gtph->len) < 40)
{
return -1;
}
if(gtph->flags & (GTP_HDR_FLAG_SEQ_NUM | GTP_HDR_FLAG_N_PDU | GTP_HDR_FLAG_NEXT_EXT_HDR)){
//todo, parse and get seq field
p_ext_hdr += 2; //seq field length is 2 bytes
@@ -281,9 +290,9 @@ static int gtp_jump_to_layer(const char *raw_data, int raw_layer_type, int expe
next_ip_layer_hdr = (unsigned char *)raw_data + gtp_hdr_len;
if((*next_ip_layer_hdr & 0x40) == 0x40){
if((*next_ip_layer_hdr & 0xF0) == 0x40){
skip_len = ipv4_jump_to_layer((char *)next_ip_layer_hdr, __ADDR_TYPE_IP_PAIR_V4, expect_layer_type);
}else if((*next_ip_layer_hdr & 0x60) == 0x60){
}else if((*next_ip_layer_hdr & 0xF0) == 0x60){
skip_len = ipv6_jump_to_layer((char *)next_ip_layer_hdr, __ADDR_TYPE_IP_PAIR_V6, expect_layer_type);
}else{
snprintf(_g_mesa_jump_layer_last_error, PIPE_BUF, "gtp_jump_to_layer() error, unsupport type in GTP, 0x%x!", (*next_ip_layer_hdr));
@@ -384,6 +393,10 @@ static int __mjl_parse_l2tpv2_hdr(const struct l2tp_hdr_v2 *pl2tphdrv2, struct l
if(pl2tphdrv2->offset_present){
offset_size = ntohs(*((unsigned short *)ptr));
if(offset_size > 1460)
{
return -1;
}
ptr += sizeof(short); /* 2 byte fix len offset size */
ptr += offset_size; /* var bytes offset value length */
}
@@ -1187,6 +1200,7 @@ static int vlan8021q_jump_to_layer(const char *raw_data, int raw_layer_type, in
/* QinQ */
case ETH_P_8021Q:
snprintf(_g_mesa_jump_layer_last_error, PIPE_BUF, "vlan8021q_jump_to_layer(): multiple VLAN combine to one layer!");
skip_len = -1;
assert(0);
break;
@@ -1413,8 +1427,23 @@ const void *MESA_jump_layer_greedy(const void *raw_data, int raw_layer_type, int
case __ADDR_TYPE_IP_PAIR_V6:
{
//TODO2,
goto done;
const struct mesa_ip6_hdr *ip6hdr = (const struct mesa_ip6_hdr *)expect_layer;
if(IPPROTO_UDP == ip6hdr->ip6_nxt_hdr){
new_next_layer_data = (char *)expect_layer + sizeof(struct mesa_ip6_hdr);
new_raw_layer_type = ADDR_TYPE_UDP; /* IP<49><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB> */
}else if(IPPROTO_GRE == ip6hdr->ip6_nxt_hdr){
new_next_layer_data = (char *)expect_layer + sizeof(struct mesa_ip6_hdr);
new_raw_layer_type = ADDR_TYPE_GRE; /* GRE */
}else if(IPPROTO_IPIP == ip6hdr->ip6_nxt_hdr){
new_next_layer_data = (char *)expect_layer + sizeof(struct mesa_ip6_hdr);
new_raw_layer_type = ADDR_TYPE_IPV4;
}else if(IPPROTO_IPIP == ip6hdr->ip6_nxt_hdr){
new_next_layer_data = (char *)expect_layer + sizeof(struct mesa_ip6_hdr);
new_raw_layer_type = ADDR_TYPE_IPV6;
}else{
//TODO 2, IPIP, L2TPv3
goto done;
}
}
break;
@@ -1462,7 +1491,7 @@ const char *MESA_jump_layer_ipv4_ntop(const struct ip *ip4_hdr, char *out_buf, i
inner_thdr = (struct mesa_tcp_hdr *)((char *)ip4_hdr + ip4_hdr->ip_hl*4);
sport = ntohs(inner_thdr->th_sport);
dport = ntohs(inner_thdr->th_dport);
}else if(IPPROTO_UDP){
}else if(IPPROTO_UDP == inner_ip_proto){
inner_uhdr = (struct mesa_udp_hdr *)((char *)ip4_hdr + ip4_hdr->ip_hl*4);
sport = ntohs(inner_uhdr->uh_sport);
dport = ntohs(inner_uhdr->uh_dport);
@@ -1495,7 +1524,7 @@ const char *MESA_jump_layer_ipv6_ntop(const struct ip6_hdr *ip6_hdr, char *out_b
inner_thdr = (struct tcphdr *)((char *)ip6_hdr + sizeof(struct ip6_hdr));
sport = inner_thdr->source;
dport = inner_thdr->dest;
}else if(IPPROTO_UDP){
}else if(IPPROTO_UDP== inner_ip_proto){
inner_uhdr = (struct udphdr *)((char *)ip6_hdr + sizeof(struct ip6_hdr));
sport = inner_uhdr->source;
dport = inner_uhdr->dest;

View File

@@ -1,11 +1,12 @@
cmake_minimum_required(VERSION 2.8)
cmake_minimum_required(VERSION 2.8...3.10)
include_directories(${CMAKE_SOURCE_DIR}/inc)
include_directories(${MESA_SDK_PREFIX}/include)
include_directories(${MESA_SDK_PREFIX}/include/MESA)
add_definitions(-D_BSD_SOURCE -D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
# add_definitions(-D_BSD_SOURCE -D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
add_definitions(-D_DEFAULT_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H)
add_definitions(-fPIC -std=c++11)
LINK_DIRECTORIES(/opt/MESA/lib)
LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/src)

View File

@@ -34,11 +34,6 @@
#define GTEST_SAPP_ERR (-1)
#define GTEST_SAPP_SUCC 0
static void sendto_test_result(int n)
{
}
static pcap_t *g_jmp_pcap_handle;
@@ -148,7 +143,7 @@ static int jump_check_udp_pkt(const struct udphdr *uhdr, unsigned short expect_u
return 0;
}
static int jump_check_vlan_pkt(const void *vlan_hdr, unsigned int expect_vlan_hex_data)
int jump_check_vlan_pkt(const void *vlan_hdr, unsigned int expect_vlan_hex_data)
{
if(memcmp(vlan_hdr, &expect_vlan_hex_data, sizeof(int)) != 0){
printf("\033[1;31;40mMESA_net_jump_to_layer(): vlan header error!\033[0m\n");
@@ -1279,6 +1274,124 @@ TEST(jump_layer, eth_vlan_ip6_udp_gtpext_ip4_tcp)
ASSERT_EQ(chk_res, 0);
}
static void jump_layer_eth_vxlan_3vlan_ipv4_udp(u_char *result_val, const struct pcap_pkthdr *hdr, const u_char *data)
{
int ret;
const void *eth_header = data;
const void *outer_ipv4_header;
const void *outer_udp_header;
//const void *gtp_header;
const void *inner_ipv4_header;
outer_ipv4_header = MESA_net_jump_to_layer(eth_header, ADDR_TYPE_MAC, ADDR_TYPE_IPV4);
if(NULL == outer_ipv4_header){
printf("\033[1;31;40m jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->ipv4 error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
ret = jump_check_ipv4_pkt((struct ip *)outer_ipv4_header, 209, IPPROTO_UDP, "10.10.0.8", "10.252.20.1");
if(ret < 0){
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
outer_udp_header = MESA_net_jump_to_layer(eth_header, ADDR_TYPE_MAC, ADDR_TYPE_UDP);
if(NULL == outer_udp_header){
printf("\033[1;31;40m jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->vlan->ipv6->udp error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
ret = jump_check_udp_pkt((const struct udphdr *)outer_udp_header, 189, 61717, 4789);
if(ret < 0){
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
const struct ethhdr *inner_mac_header = (struct ethhdr *)MESA_jump_layer_greedy(outer_ipv4_header, ADDR_TYPE_IPV4, ADDR_TYPE_MAC);
if(NULL == inner_mac_header){
printf("\033[1;31;jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->ipv6->udp->vxlan->mac error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
const unsigned char expect_src_mac[6] = {0x6c, 0x3b, 0x6b, 0xc0, 0x01, 0x1f};
const unsigned char expect_dst_mac[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
if(memcmp(inner_mac_header->h_source, expect_src_mac, 6) != 0){
printf("\033[1;31;jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->ipv6->udp->vxlan->src_mac error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
if(memcmp(inner_mac_header->h_dest, expect_dst_mac, 6) != 0){
printf("\033[1;31;jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->ipv6->udp->vxlan->dst_mac error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
inner_ipv4_header = ( struct ip *)MESA_jump_layer_greedy(eth_header, ADDR_TYPE_MAC, ADDR_TYPE_IPV4);
if(NULL == inner_ipv4_header){
printf("\033[1;31;jump_layer_eth_vxlan_3vlan_ipv4_udp(): eth->ipv6->udp->gtp->ipv4 error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
ret = jump_check_ipv4_pkt((struct ip *)inner_ipv4_header, 147, IPPROTO_UDP, "0.0.0.0", "255.255.255.255");
if(ret < 0){
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
const void *greedy_udp_hdr = MESA_jump_layer_greedy(eth_header, ADDR_TYPE_MAC, ADDR_TYPE_UDP);
if(NULL == greedy_udp_hdr){
printf("\033[1;31;40m jump_layer_eth_vxlan_3vlan_ipv4_udp(): greedy jump eth->vlan->ipv6->udp error!\033[0m\n");
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
ret = jump_check_udp_pkt((const struct udphdr *)greedy_udp_hdr, 127, 5678, 5678);
if(ret < 0){
*result_val = -1;
pcap_breakloop(g_jmp_pcap_handle);
return;
}
printf("\033[32m jump_layer_eth_vxlan_3vlan_ipv4_udp() test succ\033[0m\n");
*result_val = 0;
return;
}
#define __jump_layer_eth_vxlan_3vlan_ipv4_udp 1
TEST(jump_layer, eth_vxlan_3vlan_ipv4_udp)
{
int fun_ret;
u_char chk_res = -1;
fun_ret = jmp_file_md5_checksum("./sample_pcap/vxlan_inner_3_vlan_udp.pcap", "3d9da66edfe7e8958f797ca57fff9ba5");
ASSERT_EQ(fun_ret, 0);
fun_ret = jmp_pcap_init("./sample_pcap/vxlan_inner_3_vlan_udp.pcap", jump_layer_eth_vxlan_3vlan_ipv4_udp, (u_char *)&chk_res);
ASSERT_EQ(fun_ret, 0);
ASSERT_EQ(chk_res, 0);
}
/*
TODO:
基础协议跳转测试用例;
各种隧道嵌套协议跳转测试用例.
*/
int main(int argc, char *argv[])
{

Binary file not shown.