Skip to content

Consider SIP content type to determine if the next layer is SDP (fix … #1

Consider SIP content type to determine if the next layer is SDP (fix …

Consider SIP content type to determine if the next layer is SDP (fix … #1

name: Build and test
on:
push:
branches: ["master", "dev"]
pull_request:
branches: ["dev"]
env:
BUILD_DIR: Dist
GCOVR_FLAGS: --gcov-ignore-parse-errors --exclude-throw-branches --filter Common --filter Pcap --filter Packet --xml
jobs:
pre-commit:
runs-on: ubuntu-latest
container: seladb/alpine317
steps:
- name: Checkout code
uses: actions/checkout@v3
# Checkout is performed out of the container and doesn't match our user
- name: Fix checkout ownership
run: chown -R "$(id -u):$(id -g)" "$GITHUB_WORKSPACE"
- name: Install dependencies
run: |
apk update && apk add cppcheck python3-dev
python3 -m pip install cmake-format
- uses: pre-commit/[email protected]
- name: CMake format
run: |
./ci/cmake-format-all.sh
git diff --exit-code
- name: Configure PcapPlusPlus for Static analysis
run: CXX=clang++ CC=clang cmake -DLIGHT_PCAPNG_ZSTD=ON -DPCAPPP_ENABLE_CLANG_TIDY=ON -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus and check any diff
run: |
cmake --build "$BUILD_DIR" -j
git diff --exit-code
linux:
runs-on: ubuntu-latest
container: seladb/${{ matrix.image }}
strategy:
matrix:
include:
- image: ubuntu2204
python: python3
config-zstd: OFF
- image: ubuntu2204-icpx
python: python3
config-zstd: OFF
additional-flags: -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx
additional-gcov-flags: --gcov-executable "llvm-cov gcov"
- image: ubuntu2004
python: python3
config-zstd: OFF
- image: ubuntu1804
python: python3.8
config-zstd: OFF
- image: rhel93
python: python3
config-zstd: OFF
- image: fedora37
python: python3
config-zstd: OFF
- image: alpine317
python: python3
config-zstd: OFF
steps:
- name: Checkout code
uses: actions/checkout@v3
# Checkout is performed out of the container and doesn't match our user
- name: Fix checkout ownership
run: chown -R "$(id -u):$(id -g)" "$GITHUB_WORKSPACE"
- name: Setup Intel Compiler variables
if: contains(matrix.image, 'icpx')
run: |
. /opt/intel/oneapi/setvars.sh
printenv >> $GITHUB_ENV
- name: Configure PcapPlusPlus
run: cmake -DLIGHT_PCAPNG_ZSTD=${{ matrix.config-zstd }} -DPCAPPP_BUILD_COVERAGE=ON ${{ matrix.additional-flags }} -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Test PcapPlusPlus
run: |
${{ matrix.python }} -m pip install -U pip
${{ matrix.python }} -m pip install -r ci/run_tests/requirements.txt
${{ matrix.python }} ci/run_tests/run_tests.py --interface eth0 ${{ matrix.test-flags }}
- name: Test Examples
run: |
cd Tests/ExamplesTest
${{ matrix.python }} -m pip install -U pip
${{ matrix.python }} -m pip install -r requirements.txt
${{ matrix.python }} -m pytest --interface eth0 --root-path=../../Dist/examples_bin
- name: Check installation
run: |
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install $BUILD_DIR
- name: Build Tutorials
run: |
cmake -DPCAPPP_BUILD_TUTORIALS=ON ${{ matrix.additional-flags }} -S Examples -B build_examples
cmake --build build_examples -j
- name: Test Tutorials
run: cd build_examples/tutorials_bin && ./Tutorial-HelloWorld
- name: Create Cobertura Report
run: |
${{ matrix.python }} -m pip install gcovr
gcovr -v -r . ${{ matrix.additional-gcov-flags }} $GCOVR_FLAGS -o coverage.xml
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./coverage.xml
flags: ${{ matrix.image }},unittest
fail_ci_if_error: false
verbose: true
dpdk:
runs-on: ubuntu-latest
container: seladb/${{ matrix.image }}
strategy:
matrix:
include:
- image: ubuntu2204-dpdk2211
- image: ubuntu2004-dpdk2111
additional-flags: -DPCAPPP_USE_DPDK_KNI=ON
- image: ubuntu2004-dpdk2011
additional-flags: -DPCAPPP_USE_DPDK_KNI=ON
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Configure PcapPlusPlus
run: cmake -DPCAPPP_USE_DPDK=ON ${{ matrix.additional-flags }} -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Check AVX
run: grep avx /proc/cpuinfo
- name: Test Packet++
run: |
cd Tests/Packet++Test
if [ -n "$(grep avx512 /proc/cpuinfo)" ]; then Bin/Packet++Test; else echo AVX-512 SUPPORT NOT FOUND, CANNOT RUN Packet++Test; fi
- name: Test Pcap++
run: |
cd Tests/Pcap++Test
if [ -n "$(grep avx512 /proc/cpuinfo)" ]; then Bin/Pcap++Test -n; else echo AVX-512 SUPPORT NOT FOUND, CANNOT RUN Pcap++Test; fi
- name: Check installation
run: |
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install $BUILD_DIR
- name: Build Tutorials
run: |
cmake -DPCAPPP_BUILD_TUTORIALS=ON -S Examples -B build_examples
cmake --build build_examples -j
- name: Test Tutorials
run: cd build_examples/tutorials_bin && ./Tutorial-HelloWorld
pfring:
runs-on: ubuntu-latest
container: seladb/ubuntu2004-pfring
strategy:
matrix:
include:
- configure: cmake -DPCAPPP_USE_PF_RING=ON -DPF_RING_ROOT="/PF_RING" -S . -B "$BUILD_DIR"
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Configure PcapPlusPlus
run: ${{ matrix.configure }}
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Test Packet++
run: |
cd Tests/Packet++Test
Bin/Packet++Test
- name: Test Pcap++
run: |
cd Tests/Pcap++Test
Bin/Pcap++Test -n
- name: Check installation
run: |
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install $BUILD_DIR
- name: Build Tutorials
run: |
cmake -DPCAPPP_BUILD_TUTORIALS=ON -DPF_RING_ROOT="/PF_RING" -S Examples -B build_examples
cmake --build build_examples -j
- name: Test Tutorials
run: cd build_examples/tutorials_bin && ./Tutorial-HelloWorld
macos-x86:
runs-on: ${{ matrix.os-version }}
strategy:
matrix:
os-version: [macos-12, macos-13]
arch: [x86_64, arm64]
# Handle ZSTD build by Cirrus CI
# config-zstd: [ON, OFF]
config-zstd: [OFF]
exclude:
# excludes ZSTD on Arm64
- arch: arm64
config-zstd: ON
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions/setup-python@v5
with:
# support version: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
python-version: "3.12"
- name: Configure PcapPlusPlus
# Ensure user have access to network devices instead of giving super-user right
run: |
sudo chmod a+rw /dev/bpf*
cmake -DLIGHT_PCAPNG_ZSTD=${{ matrix.config-zstd }} -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} -DPCAPPP_BUILD_COVERAGE=ON -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Check architecture
run: lipo $BUILD_DIR/Pcap++/libPcap++.a -verify_arch ${{ matrix.arch }}
- name: Install Tcpreplay
run: brew install tcpreplay
- name: Test PcapPlusPlus
# We can't run cross compiled binaries
if: ${{ matrix.arch == 'x86_64' }}
run: |
python -m pip install -U pip
python -m pip install -r ci/run_tests/requirements.txt
python ci/run_tests/run_tests.py --interface en0
- name: Test Examples
if: ${{ matrix.arch == 'x86_64' }}
run: |
cd Tests/ExamplesTest
python -m pip install -U pip
python -m pip install -r requirements.txt
python -m pytest --interface en0 --use-sudo --root-path=../../Dist/examples_bin
- name: Check installation
run: |
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install $BUILD_DIR
- name: Build Tutorials
run: |
mkdir -p build_examples
cmake -DPCAPPP_BUILD_TUTORIALS=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} -S Examples -B build_examples
cmake --build build_examples -j
- name: Test Tutorials
if: ${{ matrix.arch == 'x86_64' }}
run: cd build_examples/tutorials_bin && ./Tutorial-HelloWorld
- name: Create Cobertura Report
run: |
python3 -m pip install gcovr
gcovr -v -r . $GCOVR_FLAGS -o coverage.xml
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./coverage.xml
flags: ${{ matrix.os-version }},unittest
fail_ci_if_error: false
verbose: true
macos-m1:
runs-on: ${{ matrix.os-version }}
strategy:
matrix:
os-version: [macos-14]
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions/setup-python@v5
with:
# support version: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
python-version: "3.12"
- name: Configure PcapPlusPlus
# Ensure user have access to network devices instead of giving super-user right
# Seems macos-14 has more strict file permission
run: |
sudo chmod a+rw /dev/bpf*
sudo chmod a+rw /usr/local
cmake -DPCAPPP_BUILD_COVERAGE=ON -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Check architecture
run: lipo $BUILD_DIR/Pcap++/libPcap++.a -verify_arch arm64
- name: Install Tcpreplay
run: brew install tcpreplay
- name: Test PcapPlusPlus
run: |
python -m pip install -U pip
python -m pip install -r ci/run_tests/requirements.txt
python ci/run_tests/run_tests.py --interface en0
- name: Test Examples
run: |
cd Tests/ExamplesTest
python -m pip install -U pip
python -m pip install -r requirements.txt
python -m pytest --interface en0 --use-sudo --root-path=../../Dist/examples_bin
- name: Check installation
run: |
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install "$BUILD_DIR"
- name: Build Tutorials
run: |
mkdir -p build_examples
cmake -DPCAPPP_BUILD_TUTORIALS=ON -S Examples -B build_examples
cmake --build build_examples -j
- name: Test Tutorials
run: cd build_examples/tutorials_bin && ./Tutorial-HelloWorld
- name: Create Cobertura Report
run: |
python3 -m pip install gcovr
gcovr -v -r . $GCOVR_FLAGS -o coverage.xml
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./coverage.xml
flags: ${{ matrix.os-version }},unittest
fail_ci_if_error: false
verbose: true
mingw-w64:
runs-on: windows-latest
strategy:
matrix:
include:
- env: i686
sys: mingw32
- env: x86_64
sys: mingw64
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
install: >-
git
mingw-w64-${{matrix.env}}-cmake
mingw-w64-${{matrix.env}}-gcc
mingw-w64-${{matrix.env}}-make
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8.x"
- name: Install NPcap
env:
NPCAP_USERNAME: ${{ secrets.NPCAP_USERNAME }}
NPCAP_PASSWORD: ${{ secrets.NPCAP_PASSWORD }}
run: |
ci\install_npcap.bat
echo "PCAP_SDK_DIR=/C/Npcap-sdk" >> $env:GITHUB_ENV
- name: Configure PcapPlusPlus
shell: msys2 {0}
run: |
cmake -G "MinGW Makefiles" -DPCAP_ROOT=/C/Npcap-sdk -DLIGHT_PCAPNG_ZSTD=OFF -DPCAPPP_BUILD_COVERAGE=ON -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
shell: msys2 {0}
# More than 2 jobs would make the build crash with OOM
# cc1plus.exe: out of memory allocating 65536 bytes
run: cmake --build "$BUILD_DIR" -j 2
- name: Install tcpreplay
run: ci\install_tcpreplay.bat
- name: Test PcapPlusPlus
run: |
python -m pip install -r ci\run_tests\requirements.txt
python ci\run_tests\run_tests_windows.py
- name: Test Examples
run: |
cd Tests\ExamplesTest
python -m pip install -r requirements.txt
python -m pytest --root-path=../../Dist/examples_bin
- name: Install Coverage Requirements
run: python3 -m pip install gcovr
- name: Process Coverage Files
shell: msys2 {0}
run: find . -name "*.gcno" -exec gcov -b -l -p -c {} +
- name: Create Coberture Report
run: gcovr -v -g -k -r . $env:GCOVR_FLAGS.split() -o coverage.xml
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./coverage.xml
flags: ${{ matrix.sys }},unittest
fail_ci_if_error: false
verbose: true
visual-studio:
strategy:
matrix:
include:
- os: "windows-2019"
platform: "Visual Studio 16 2019"
arch: "x64"
pcap_lib: "npcap"
- os: windows-2019
platform: "Visual Studio 16 2019"
arch: Win32
pcap_lib: "winpcap"
- os: windows-2022
platform: "Visual Studio 17 2022"
arch: "x64"
pcap_lib: "winpcap"
- os: windows-2022
platform: "Visual Studio 17 2022"
arch: "x64"
pcap_lib: "npcap"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions/setup-python@v5
with:
python-version: "3.8.x"
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Setup OpenCppCoverage and add to PATH
run: |
choco install OpenCppCoverage -y
echo "C:\Program Files\OpenCppCoverage" >> $env:GITHUB_PATH
- name: Install WinPcap
run: |
ci\install_winpcap.bat
echo "PCAP_SDK_DIR=C:\WpdPack" >> $env:GITHUB_ENV
if: matrix.pcap_lib == 'winpcap'
- name: Install NPcap
env:
NPCAP_USERNAME: ${{ secrets.NPCAP_USERNAME }}
NPCAP_PASSWORD: ${{ secrets.NPCAP_PASSWORD }}
run: |
ci\install_npcap.bat
echo "PCAP_SDK_DIR=C:\Npcap-sdk" >> $env:GITHUB_ENV
if: matrix.pcap_lib == 'npcap'
- name: Set Zstd
run: |
ci\install_zstd.bat
echo "ZSTD_HOME_PARAM=-z C:\zstd" >> $env:GITHUB_ENV
if: matrix.use_zstd == true
- name: Configure PcapPlusPlus
run: cmake -A ${{ matrix.arch }} -G "${{ matrix.platform }}" -DPCAP_ROOT=${{ env.PCAP_SDK_DIR }} -S . -B "$env:BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build $env:BUILD_DIR -j
- name: Install tcpreplay
run: ci\install_tcpreplay.bat
- name: Test PcapPlusPlus
run: |
python -m pip install -r ci\run_tests\requirements.txt
python ci\run_tests\run_tests_windows.py --coverage
- name: Test Examples
run: |
move ".\Dist\examples_bin\Debug\*" ".\Dist\examples_bin\"
cd Tests\ExamplesTest
python -m pip install -r requirements.txt
python -m pytest --root-path=../../Dist/examples_bin
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./Tests/Pcap++Test/Pcap++Coverage.xml,./Tests/Packet++Test/Packet++Coverage.xml
flags: ${{ matrix.os }},unittest,${{ matrix.pcap_lib }}
fail_ci_if_error: false
verbose: true
android:
strategy:
matrix:
include:
- run-on-os: ubuntu-20.04
target: armeabi-v7a
api-version: 30
- run-on-os: ubuntu-20.04
target: x86
api-version: 30
- run-on-os: macos-11
target: arm64-v8a
cmake_configure: "-DCMAKE_OSX_ARCHITECTURES=arm64"
api-version: 30
- run-on-os: macos-11
target: x86_64
cmake_configure: "-DCMAKE_OSX_ARCHITECTURES=x86_64"
api-version: 30
runs-on: ${{ matrix.run-on-os }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Checkout lipbcap for Android
uses: actions/checkout@main
with:
repository: seladb/libpcap-android
path: ./libpcap-android
- name: Configure PcapPlusPlus
run: |
LIBPCAP_PATH=$(pwd)/libpcap-android
cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" -DANDROID_PLATFORM="${{ matrix.api-version}}" -DANDROID_ABI="${{ matrix.target }}" -DPCAP_INCLUDE_DIR="${LIBPCAP_PATH}/include/" -DPCAP_LIBRARY="${LIBPCAP_PATH}/${{ matrix.target }}/${{ matrix.api-version}}/libpcap.a" -S . -B "$BUILD_DIR"
- name: Build PcapPlusPlus
run: cmake --build "$BUILD_DIR" -j
- name: Checkout ToyVpn-PcapPlusPlus
uses: actions/checkout@master
with:
repository: seladb/ToyVpn-PcapPlusPlus
path: ./ToyVpn-PcapPlusPlus
submodules: true
- name: Install locally PcapPlusPlus
# CMake install library in $prefix/lib ToyVpn want $prefix/$target/$api-version
run: |
TOYVPN_PCAPPLUSPLUS="./ToyVpn-PcapPlusPlus/app/libs/pcapplusplus"
PCAPPLUSPLUS_LIBS_PATH="$TOYVPN_PCAPPLUSPLUS/${{ matrix.target }}/${{ matrix.api-version }}"
PCAPPLUSPLUS_INCLUDE_PATH="$TOYVPN_PCAPPLUSPLUS/include"
cmake -DPCAPPP_BUILD_COVERAGE=OFF -S . -B "$BUILD_DIR"
cmake --build "$BUILD_DIR" -j
cmake --install $BUILD_DIR --prefix ${TOYVPN_PCAPPLUSPLUS}
mkdir -p ${PCAPPLUSPLUS_LIBS_PATH} ${PCAPPLUSPLUS_INCLUDE_PATH}
mv ${TOYVPN_PCAPPLUSPLUS}/lib/*.a ${PCAPPLUSPLUS_LIBS_PATH}/
mv ${TOYVPN_PCAPPLUSPLUS}/include/pcapplusplus/*.h ${PCAPPLUSPLUS_INCLUDE_PATH}/
- name: Build ToyVpn-PcapPlusPlus
working-directory: ./ToyVpn-PcapPlusPlus
run: |
sed -i.bak "s|abiFilters.*$|abiFilters '${{ matrix.target }}'|g" app/build.gradle
chmod +x gradlew
./gradlew assembleDebug
xdp:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update && sudo apt -y install libpcap-dev libbpf-dev tcpreplay
- name: Configure PcapPlusPlus
run: cmake -DPCAPPP_USE_XDP=ON -DPCAPPP_BUILD_COVERAGE=ON -S . -B $BUILD_DIR
- name: Build PcapPlusPlus
run: cmake --build $BUILD_DIR -j
- name: Test PcapPlusPlus
run: |
python -m pip install -U pip
python -m pip install -r ci/run_tests/requirements.txt
python ci/run_tests/run_tests.py --interface eth0 --use-sudo --pcap-test-args="-t xdp"
- name: Create Cobertura Report
run: |
python -m pip install gcovr
gcovr -v -r . $GCOVR_FLAGS -o coverage.xml
- name: Upload Coverage Results
uses: codecov/[email protected]
with:
files: ./coverage.xml
flags: xdp,unittest
fail_ci_if_error: false
verbose: true
test_regressions:
name: Run ${{ matrix.engine }}-${{ matrix.sanitizer }} fuzzer for regressions
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
sanitizer: [address, undefined, memory]
engine: [libfuzzer]
container:
image: gcr.io/oss-fuzz-base/base-builder
steps:
- uses: actions/checkout@v4
- name: Install prerequisites
run: |
apt-get update && apt-get install -y cmake autoconf flex bison
cd ..
cp -r PcapPlusPlus/ $SRC/PcapPlusPlus
git clone --depth=1 https://github.com/the-tcpdump-group/libpcap.git $SRC/libpcap
cd $SRC/PcapPlusPlus/
- name: Compile fuzzer
run: |
export FUZZING_LANGUAGE=c
export ARCHITECTURE=x86_64
export FUZZING_ENGINE=${{ matrix.engine }}
export SANITIZER=${{ matrix.sanitizer }}
$SRC/PcapPlusPlus/Tests/Fuzzers/ossfuzz.sh
- name: Check for regressions
run: |
export BINARY="$OUT/FuzzTarget"
export SAMPLES="Tests/Fuzzers/RegressionTests/regression_samples"
Tests/Fuzzers/RegressionTests/run_tests.sh