--- /dev/null
+#!/bin/bash
+
+set -o errexit
+set -x
+
+CFLAGS_FOR_OVS="-g -O2"
+SPARSE_FLAGS=""
+EXTRA_OPTS="--enable-Werror"
+
+function install_kernel()
+{
+ if [[ "$1" =~ ^5.* ]]; then
+ PREFIX="v5.x"
+ elif [[ "$1" =~ ^4.* ]]; then
+ PREFIX="v4.x"
+ elif [[ "$1" =~ ^3.* ]]; then
+ PREFIX="v3.x"
+ else
+ PREFIX="v2.6/longterm/v2.6.32"
+ fi
+
+ base_url="https://cdn.kernel.org/pub/linux/kernel/${PREFIX}"
+ # Download page with list of all available kernel versions.
+ wget ${base_url}/
+ # Uncompress in case server returned gzipped page.
+ (file index* | grep ASCII) || (mv index* index.new.gz && gunzip index*)
+ # Get version of the latest stable release.
+ hi_ver=$(echo ${1} | sed 's/\./\\\./')
+ lo_ver=$(cat ./index* | grep -P -o "${hi_ver}\.[0-9]+" | \
+ sed 's/.*\..*\.\(.*\)/\1/' | sort -h | tail -1)
+ version="${1}.${lo_ver}"
+
+ rm -rf index* linux-*
+
+ url="${base_url}/linux-${version}.tar.xz"
+ # Download kernel sources. Try direct link on CDN failure.
+ wget ${url} ||
+ (rm -f linux-${version}.tar.xz && wget ${url}) ||
+ (rm -f linux-${version}.tar.xz && wget ${url/cdn/www})
+
+ tar xvf linux-${version}.tar.xz > /dev/null
+ pushd linux-${version}
+ make allmodconfig
+
+ # Cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler
+ sed -i 's/CONFIG_KCOV=y/CONFIG_KCOV=n/' .config
+
+ # stack validation depends on tools/objtool, but objtool does not compile on travis.
+ # It is giving following error.
+ # >>> GEN arch/x86/insn/inat-tables.c
+ # >>> Semantic error at 40: Unknown imm opnd: AL
+ # So for now disable stack-validation for the build.
+
+ sed -i 's/CONFIG_STACK_VALIDATION=y/CONFIG_STACK_VALIDATION=n/' .config
+ make oldconfig
+
+ # Older kernels do not include openvswitch
+ if [ -d "net/openvswitch" ]; then
+ make net/openvswitch/
+ else
+ make net/bridge/
+ fi
+
+ if [ "$AFXDP" ]; then
+ sudo make headers_install INSTALL_HDR_PATH=/usr
+ pushd tools/lib/bpf/
+ # Bulding with gcc because there are some issues in make files
+ # that breaks building libbpf with clang on Travis.
+ CC=gcc sudo make install
+ CC=gcc sudo make install_headers
+ sudo ldconfig
+ popd
+ # The Linux kernel defines __always_inline in stddef.h (283d7573), and
+ # sys/cdefs.h tries to re-define it. Older libc-dev package in xenial
+ # doesn't have a fix for this issue. Applying it manually.
+ sudo sed -i '/^# define __always_inline .*/i # undef __always_inline' \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h || true
+ EXTRA_OPTS="${EXTRA_OPTS} --enable-afxdp"
+ else
+ EXTRA_OPTS="${EXTRA_OPTS} --with-linux=$(pwd)"
+ echo "Installed kernel source in $(pwd)"
+ fi
+ popd
+}
+
+function install_dpdk()
+{
+ local DPDK_VER=$1
+ local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
+
+ if [ -z "$TRAVIS_ARCH" ] ||
+ [ "$TRAVIS_ARCH" == "amd64" ]; then
+ TARGET="x86_64-native-linuxapp-gcc"
+ elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
+ TARGET="arm64-armv8a-linuxapp-gcc"
+ else
+ echo "Target is unknown"
+ exit 1
+ fi
+
+ if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
+ # Avoid using cache for git tree build.
+ rm -rf dpdk-dir
+
+ DPDK_GIT=${DPDK_GIT:-https://dpdk.org/git/dpdk}
+ git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
+ pushd dpdk-dir
+ git log -1 --oneline
+ else
+ if [ -f "${VERSION_FILE}" ]; then
+ VER=$(cat ${VERSION_FILE})
+ if [ "${VER}" = "${DPDK_VER}" ]; then
+ EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-dir/build"
+ echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir"
+ return
+ fi
+ fi
+ # No cache or version mismatch.
+ rm -rf dpdk-dir
+ wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
+ tar xvf dpdk-$1.tar.xz > /dev/null
+ DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
+ mv ${DIR_NAME} dpdk-dir
+ pushd dpdk-dir
+ fi
+
+ make config CC=gcc T=$TARGET
+
+ if [ "$DPDK_SHARED" ]; then
+ sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
+ fi
+
+ # Disable building DPDK kernel modules. Not needed for OVS build or tests.
+ sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config
+ sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config
+
+ # Switching to 'default' machine to make dpdk-dir cache usable on different
+ # CPUs. We can't be sure that all CI machines are exactly same.
+ sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/' build/.config
+
+ make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
+ EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
+ echo "Installed DPDK source in $(pwd)"
+ popd
+ echo "${DPDK_VER}" > ${VERSION_FILE}
+}
+
+function configure_ovs()
+{
+ ./boot.sh
+ ./configure CFLAGS="${CFLAGS_FOR_OVS}" $* || { cat config.log; exit 1; }
+}
+
+function build_ovs()
+{
+ local KERNEL=$1
+
+ configure_ovs $OPTS
+ make selinux-policy
+
+ # Only build datapath if we are testing kernel w/o running testsuite and
+ # AF_XDP support.
+ if [ "${KERNEL}" ] && ! [ "$AFXDP" ]; then
+ pushd datapath
+ make -j4
+ popd
+ else
+ make -j4 || { cat config.log; exit 1; }
+ fi
+}
+
+if [ "$DEB_PACKAGE" ]; then
+ mk-build-deps --install --root-cmd sudo --remove debian/control
+ dpkg-checkbuilddeps
+ DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
+ # Not trying to install ipsec package as there are issues with system-wide
+ # installed python3-openvswitch package and the pyenv used by Travis.
+ packages=$(ls $(pwd)/../*.deb | grep -v ipsec)
+ sudo apt install ${packages}
+ exit 0
+fi
+
+if [ "$KERNEL" ]; then
+ install_kernel $KERNEL
+fi
+
+if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
+ if [ -z "$DPDK_VER" ]; then
+ DPDK_VER="19.11.2"
+ fi
+ install_dpdk $DPDK_VER
+ if [ "$CC" = "clang" ]; then
+ # Disregard cast alignment errors until DPDK is fixed
+ CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-cast-align"
+ fi
+fi
+
+if [ "$CC" = "clang" ]; then
+ CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-error=unused-command-line-argument"
+elif [ "$M32" ]; then
+ # Not using sparse for 32bit builds on 64bit machine.
+ # Adding m32 flag directly to CC to avoid any posiible issues with API/ABI
+ # difference on 'configure' and 'make' stages.
+ export CC="$CC -m32"
+elif [ "$TRAVIS_ARCH" != "aarch64" ]; then
+ OPTS="--enable-sparse"
+ if [ "$AFXDP" ]; then
+ # netdev-afxdp uses memset for 64M for umem initialization.
+ SPARSE_FLAGS="${SPARSE_FLAGS} -Wno-memcpy-max-count"
+ fi
+ CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${SPARSE_FLAGS}"
+fi
+
+save_OPTS="${OPTS} $*"
+OPTS="${EXTRA_OPTS} ${save_OPTS}"
+
+if [ "$TESTSUITE" ]; then
+ # 'distcheck' will reconfigure with required options.
+ # Now we only need to prepare the Makefile without sparse-wrapped CC.
+ configure_ovs
+
+ export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
+ if ! make distcheck CFLAGS="${CFLAGS_FOR_OVS}" \
+ TESTSUITEFLAGS=-j4 RECHECK=yes; then
+ # testsuite.log is necessary for debugging.
+ cat */_build/sub/tests/testsuite.log
+ exit 1
+ fi
+else
+ if [ -z "${KERNEL_LIST}" ]; then build_ovs ${KERNEL};
+ else
+ save_EXTRA_OPTS="${EXTRA_OPTS}"
+ for KERNEL in ${KERNEL_LIST}; do
+ echo "=============================="
+ echo "Building with kernel ${KERNEL}"
+ echo "=============================="
+ EXTRA_OPTS="${save_EXTRA_OPTS}"
+ install_kernel ${KERNEL}
+ OPTS="${EXTRA_OPTS} ${save_OPTS}"
+ build_ovs ${KERNEL}
+ make distclean
+ done
+ fi
+fi
+
+exit 0
--- /dev/null
+#!/bin/bash
+
+set -ev
+
+if [ "$DEB_PACKAGE" ]; then
+ # We're not using sparse for debian packages, tests are skipped and
+ # all extra dependencies tracked by mk-build-deps.
+ exit 0
+fi
+
+# Build and install sparse.
+#
+# Explicitly disable sparse support for llvm because some travis
+# environments claim to have LLVM (llvm-config exists and works) but
+# linking against it fails.
+# Disabling sqlite support because sindex build fails and we don't
+# really need this utility being installed.
+git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
+cd sparse
+make -j4 HAVE_LLVM= HAVE_SQLITE= install
+cd ..
+
+pip3 install --disable-pip-version-check --user flake8 hacking
+pip3 install --user --upgrade docutils
+
+if [ "$M32" ]; then
+ # Installing 32-bit libraries.
+ pkgs="gcc-multilib"
+ if [ -z "$GITHUB_WORKFLOW" ]; then
+ # 32-bit and 64-bit libunwind can not be installed at the same time.
+ # This will remove the 64-bit libunwind and install 32-bit version.
+ # GitHub Actions doesn't have 32-bit versions of these libs.
+ pkgs=$pkgs" libunwind-dev:i386 libunbound-dev:i386"
+ fi
+
+ sudo apt-get install -y $pkgs
+fi
+
+# IPv6 is supported by kernel but disabled in TravisCI images:
+# https://github.com/travis-ci/travis-ci/issues/8891
+# Enable it to avoid skipping of IPv6 related tests.
+sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
--- /dev/null
+#!/bin/bash
+
+set -o errexit
+
+CFLAGS="-Werror $CFLAGS"
+EXTRA_OPTS=""
+
+function configure_ovs()
+{
+ ./boot.sh && ./configure $*
+}
+
+configure_ovs $EXTRA_OPTS $*
+
+if [ "$CC" = "clang" ]; then
+ set make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
+else
+ set make CFLAGS="$CFLAGS $BUILD_ENV"
+fi
+if ! "$@"; then
+ cat config.log
+ exit 1
+fi
+if [ "$TESTSUITE" ] && [ "$CC" != "clang" ]; then
+ if ! make distcheck RECHECK=yes; then
+ # testsuite.log is necessary for debugging.
+ cat */_build/sub/tests/testsuite.log
+ exit 1
+ fi
+fi
+
+exit 0
--- /dev/null
+#!/bin/bash
+set -ev
+pip3 install --user --upgrade docutils
--- /dev/null
+name: Build and Test
+
+on: [push, pull_request]
+
+jobs:
+ build-linux:
+ env:
+ dependencies: |
+ automake libtool gcc bc libjemalloc1 libjemalloc-dev \
+ libssl-dev llvm-dev libelf-dev libnuma-dev libpcap-dev \
+ python3-openssl python3-pip python3-sphinx \
+ selinux-policy-dev
+ deb_dependencies: |
+ linux-headers-$(uname -r) build-essential fakeroot devscripts equivs
+ AFXDP: ${{ matrix.afxdp }}
+ CC: ${{ matrix.compiler }}
+ DEB_PACKAGE: ${{ matrix.deb_package }}
+ DPDK: ${{ matrix.dpdk }}
+ DPDK_SHARED: ${{ matrix.dpdk_shared }}
+ KERNEL: ${{ matrix.kernel }}
+ KERNEL_LIST: ${{ matrix.kernel_list }}
+ LIBS: ${{ matrix.libs }}
+ M32: ${{ matrix.m32 }}
+ OPTS: ${{ matrix.opts }}
+ TESTSUITE: ${{ matrix.testsuite }}
+
+ name: linux ${{ join(matrix.*, ' ') }}
+ runs-on: ubuntu-18.04
+ timeout-minutes: 30
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - compiler: gcc
+ opts: --disable-ssl
+ - compiler: clang
+ opts: --disable-ssl
+
+ - compiler: gcc
+ testsuite: test
+ kernel: 3.16
+ - compiler: clang
+ testsuite: test
+ kernel: 3.16
+
+ - compiler: gcc
+ testsuite: test
+ opts: --enable-shared
+ - compiler: clang
+ testsuite: test
+ opts: --enable-shared
+
+ - compiler: gcc
+ testsuite: test
+ dpdk: dpdk
+ - compiler: clang
+ testsuite: test
+ dpdk: dpdk
+
+ - compiler: gcc
+ testsuite: test
+ libs: -ljemalloc
+ - compiler: clang
+ testsuite: test
+ libs: -ljemalloc
+
+ - compiler: gcc
+ kernel_list: 5.8 5.5 5.4 4.19
+ - compiler: clang
+ kernel_list: 5.8 5.5 5.4 4.19
+
+ - compiler: gcc
+ kernel_list: 4.14 4.9 4.4 3.16
+ - compiler: clang
+ kernel_list: 4.14 4.9 4.4 3.16
+
+ - compiler: gcc
+ afxdp: afxdp
+ kernel: 5.3
+ - compiler: clang
+ afxdp: afxdp
+ kernel: 5.3
+
+ - compiler: gcc
+ dpdk: dpdk
+ opts: --enable-shared
+ - compiler: clang
+ dpdk: dpdk
+ opts: --enable-shared
+
+ - compiler: gcc
+ dpdk_shared: dpdk-shared
+ - compiler: clang
+ dpdk_shared: dpdk-shared
+
+ - compiler: gcc
+ dpdk_shared: dpdk-shared
+ opts: --enable-shared
+ - compiler: clang
+ dpdk_shared: dpdk-shared
+ opts: --enable-shared
+
+ - compiler: gcc
+ m32: m32
+ opts: --disable-ssl
+
+ - compiler: gcc
+ deb_package: deb
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+
+ - name: create ci signature file for the dpdk cache key
+ if: matrix.dpdk != '' || matrix.dpdk_shared != ''
+ # This will collect most of DPDK related lines, so hash will be different
+ # if something changed in a way we're building DPDK including DPDK_VER.
+ # This also allows us to use cache from any branch as long as version
+ # and a way we're building DPDK stays the same.
+ run: |
+ grep -irE 'RTE_|DPDK|meson|ninja' -r .ci/ > dpdk-ci-signature
+ cat dpdk-ci-signature
+
+ - name: cache
+ if: matrix.dpdk != '' || matrix.dpdk_shared != ''
+ uses: actions/cache@v2
+ env:
+ matrix_key: ${{ matrix.dpdk }}${{ matrix.dpdk_shared }}
+ ci_key: ${{ hashFiles('dpdk-ci-signature') }}
+ with:
+ path: dpdk-dir
+ key: ${{ env.matrix_key }}-${{ env.ci_key }}
+
+ - name: install common dependencies
+ if: matrix.deb_package == ''
+ run: sudo apt install -y ${{ env.dependencies }}
+ - name: install dependencies for debian packages
+ if: matrix.deb_package != ''
+ run: sudo apt install -y ${{ env.deb_dependencies }}
+ - name: install libunbound libunwind
+ if: matrix.m32 == ''
+ run: sudo apt install -y libunbound-dev libunwind-dev
+
+ - name: prepare
+ run: ./.ci/linux-prepare.sh
+
+ - name: build
+ run: PATH="$PATH:$HOME/bin" ./.ci/linux-build.sh
+
+ - name: upload deb packages
+ if: matrix.deb_package != ''
+ uses: actions/upload-artifact@v2
+ with:
+ name: deb-packages
+ path: '/home/runner/work/ovs/*.deb'
+
+ - name: copy logs on failure
+ if: failure() || cancelled()
+ run: |
+ # upload-artifact@v2 throws exceptions if it tries to upload socket
+ # files and we could have some socket files in testsuite.dir.
+ # Also, upload-artifact@v2 doesn't work well enough with wildcards.
+ # So, we're just archiving everything here to avoid any issues.
+ mkdir logs
+ cp config.log ./logs/
+ cp -r ./*/_build/sub/tests/testsuite.* ./logs/ || true
+ tar -czvf logs.tgz logs/
+
+ - name: upload logs on failure
+ if: failure() || cancelled()
+ uses: actions/upload-artifact@v2
+ with:
+ name: logs-linux-${{ join(matrix.*, '-') }}
+ path: logs.tgz
+
+ build-osx:
+ env:
+ CC: clang
+ OPTS: --disable-ssl
+
+ name: osx clang --disable-ssl
+ runs-on: macos-latest
+ timeout-minutes: 30
+
+ strategy:
+ fail-fast: false
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+ - name: install dependencies
+ run: brew install automake libtool
+ - name: prepare
+ run: ./.ci/osx-prepare.sh
+ - name: build
+ run: PATH="$PATH:$HOME/bin" ./.ci/osx-build.sh
+ - name: upload logs on failure
+ if: failure()
+ uses: actions/upload-artifact@v2
+ with:
+ name: logs-osx-clang---disable-ssl
+ path: config.log
- libunbound-dev
- libunwind-dev
-before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh
+before_install: ./.ci/${TRAVIS_OS_NAME}-prepare.sh
before_script: export PATH=$PATH:$HOME/bin
- devscripts
- equivs
-script: ./.travis/${TRAVIS_OS_NAME}-build.sh $OPTS
+script: ./.ci/${TRAVIS_OS_NAME}-build.sh $OPTS
notifications:
email:
+++ /dev/null
-#!/bin/bash
-
-set -o errexit
-set -x
-
-CFLAGS_FOR_OVS="-g -O2"
-SPARSE_FLAGS=""
-EXTRA_OPTS="--enable-Werror"
-
-function install_kernel()
-{
- if [[ "$1" =~ ^5.* ]]; then
- PREFIX="v5.x"
- elif [[ "$1" =~ ^4.* ]]; then
- PREFIX="v4.x"
- elif [[ "$1" =~ ^3.* ]]; then
- PREFIX="v3.x"
- else
- PREFIX="v2.6/longterm/v2.6.32"
- fi
-
- base_url="https://cdn.kernel.org/pub/linux/kernel/${PREFIX}"
- # Download page with list of all available kernel versions.
- wget ${base_url}/
- # Uncompress in case server returned gzipped page.
- (file index* | grep ASCII) || (mv index* index.new.gz && gunzip index*)
- # Get version of the latest stable release.
- hi_ver=$(echo ${1} | sed 's/\./\\\./')
- lo_ver=$(cat ./index* | grep -P -o "${hi_ver}\.[0-9]+" | \
- sed 's/.*\..*\.\(.*\)/\1/' | sort -h | tail -1)
- version="${1}.${lo_ver}"
-
- rm -rf index* linux-*
-
- url="${base_url}/linux-${version}.tar.xz"
- # Download kernel sources. Try direct link on CDN failure.
- wget ${url} ||
- (rm -f linux-${version}.tar.xz && wget ${url}) ||
- (rm -f linux-${version}.tar.xz && wget ${url/cdn/www})
-
- tar xvf linux-${version}.tar.xz > /dev/null
- pushd linux-${version}
- make allmodconfig
-
- # Cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler
- sed -i 's/CONFIG_KCOV=y/CONFIG_KCOV=n/' .config
-
- # stack validation depends on tools/objtool, but objtool does not compile on travis.
- # It is giving following error.
- # >>> GEN arch/x86/insn/inat-tables.c
- # >>> Semantic error at 40: Unknown imm opnd: AL
- # So for now disable stack-validation for the build.
-
- sed -i 's/CONFIG_STACK_VALIDATION=y/CONFIG_STACK_VALIDATION=n/' .config
- make oldconfig
-
- # Older kernels do not include openvswitch
- if [ -d "net/openvswitch" ]; then
- make net/openvswitch/
- else
- make net/bridge/
- fi
-
- if [ "$AFXDP" ]; then
- sudo make headers_install INSTALL_HDR_PATH=/usr
- pushd tools/lib/bpf/
- # Bulding with gcc because there are some issues in make files
- # that breaks building libbpf with clang on Travis.
- CC=gcc sudo make install
- CC=gcc sudo make install_headers
- sudo ldconfig
- popd
- # The Linux kernel defines __always_inline in stddef.h (283d7573), and
- # sys/cdefs.h tries to re-define it. Older libc-dev package in xenial
- # doesn't have a fix for this issue. Applying it manually.
- sudo sed -i '/^# define __always_inline .*/i # undef __always_inline' \
- /usr/include/x86_64-linux-gnu/sys/cdefs.h || true
- EXTRA_OPTS="${EXTRA_OPTS} --enable-afxdp"
- else
- EXTRA_OPTS="${EXTRA_OPTS} --with-linux=$(pwd)"
- echo "Installed kernel source in $(pwd)"
- fi
- popd
-}
-
-function install_dpdk()
-{
- local DPDK_VER=$1
- local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
-
- if [ -z "$TRAVIS_ARCH" ] ||
- [ "$TRAVIS_ARCH" == "amd64" ]; then
- TARGET="x86_64-native-linuxapp-gcc"
- elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
- TARGET="arm64-armv8a-linuxapp-gcc"
- else
- echo "Target is unknown"
- exit 1
- fi
-
- if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
- # Avoid using cache for git tree build.
- rm -rf dpdk-dir
-
- DPDK_GIT=${DPDK_GIT:-https://dpdk.org/git/dpdk}
- git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
- pushd dpdk-dir
- git log -1 --oneline
- else
- if [ -f "${VERSION_FILE}" ]; then
- VER=$(cat ${VERSION_FILE})
- if [ "${VER}" = "${DPDK_VER}" ]; then
- EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-dir/build"
- echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir"
- return
- fi
- fi
- # No cache or version mismatch.
- rm -rf dpdk-dir
- wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
- tar xvf dpdk-$1.tar.xz > /dev/null
- DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
- mv ${DIR_NAME} dpdk-dir
- pushd dpdk-dir
- fi
-
- make config CC=gcc T=$TARGET
-
- if [ "$DPDK_SHARED" ]; then
- sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
- fi
-
- # Disable building DPDK kernel modules. Not needed for OVS build or tests.
- sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config
- sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config
-
- # Switching to 'default' machine to make dpdk-dir cache usable on different
- # CPUs. We can't be sure that all CI machines are exactly same.
- sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/' build/.config
-
- make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
- EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
- echo "Installed DPDK source in $(pwd)"
- popd
- echo "${DPDK_VER}" > ${VERSION_FILE}
-}
-
-function configure_ovs()
-{
- ./boot.sh
- ./configure CFLAGS="${CFLAGS_FOR_OVS}" $* || { cat config.log; exit 1; }
-}
-
-function build_ovs()
-{
- local KERNEL=$1
-
- configure_ovs $OPTS
- make selinux-policy
-
- # Only build datapath if we are testing kernel w/o running testsuite and
- # AF_XDP support.
- if [ "${KERNEL}" ] && ! [ "$AFXDP" ]; then
- pushd datapath
- make -j4
- popd
- else
- make -j4 || { cat config.log; exit 1; }
- fi
-}
-
-if [ "$DEB_PACKAGE" ]; then
- mk-build-deps --install --root-cmd sudo --remove debian/control
- dpkg-checkbuilddeps
- DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
- # Not trying to install ipsec package as there are issues with system-wide
- # installed python3-openvswitch package and the pyenv used by Travis.
- packages=$(ls $(pwd)/../*.deb | grep -v ipsec)
- sudo apt install ${packages}
- exit 0
-fi
-
-if [ "$KERNEL" ]; then
- install_kernel $KERNEL
-fi
-
-if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
- if [ -z "$DPDK_VER" ]; then
- DPDK_VER="19.11.2"
- fi
- install_dpdk $DPDK_VER
- if [ "$CC" = "clang" ]; then
- # Disregard cast alignment errors until DPDK is fixed
- CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-cast-align"
- fi
-fi
-
-if [ "$CC" = "clang" ]; then
- CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-error=unused-command-line-argument"
-elif [ "$M32" ]; then
- # Not using sparse for 32bit builds on 64bit machine.
- # Adding m32 flag directly to CC to avoid any posiible issues with API/ABI
- # difference on 'configure' and 'make' stages.
- export CC="$CC -m32"
-elif [ "$TRAVIS_ARCH" != "aarch64" ]; then
- OPTS="--enable-sparse"
- if [ "$AFXDP" ]; then
- # netdev-afxdp uses memset for 64M for umem initialization.
- SPARSE_FLAGS="${SPARSE_FLAGS} -Wno-memcpy-max-count"
- fi
- CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${SPARSE_FLAGS}"
-fi
-
-save_OPTS="${OPTS} $*"
-OPTS="${EXTRA_OPTS} ${save_OPTS}"
-
-if [ "$TESTSUITE" ]; then
- # 'distcheck' will reconfigure with required options.
- # Now we only need to prepare the Makefile without sparse-wrapped CC.
- configure_ovs
-
- export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
- if ! make distcheck CFLAGS="${CFLAGS_FOR_OVS}" \
- TESTSUITEFLAGS=-j4 RECHECK=yes; then
- # testsuite.log is necessary for debugging.
- cat */_build/sub/tests/testsuite.log
- exit 1
- fi
-else
- if [ -z "${KERNEL_LIST}" ]; then build_ovs ${KERNEL};
- else
- save_EXTRA_OPTS="${EXTRA_OPTS}"
- for KERNEL in ${KERNEL_LIST}; do
- echo "=============================="
- echo "Building with kernel ${KERNEL}"
- echo "=============================="
- EXTRA_OPTS="${save_EXTRA_OPTS}"
- install_kernel ${KERNEL}
- OPTS="${EXTRA_OPTS} ${save_OPTS}"
- build_ovs ${KERNEL}
- make distclean
- done
- fi
-fi
-
-exit 0
+++ /dev/null
-#!/bin/bash
-
-set -ev
-
-if [ "$DEB_PACKAGE" ]; then
- # We're not using sparse for debian packages, tests are skipped and
- # all extra dependencies tracked by mk-build-deps.
- exit 0
-fi
-
-# Build and install sparse.
-#
-# Explicitly disable sparse support for llvm because some travis
-# environments claim to have LLVM (llvm-config exists and works) but
-# linking against it fails.
-# Disabling sqlite support because sindex build fails and we don't
-# really need this utility being installed.
-git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
-cd sparse
-make -j4 HAVE_LLVM= HAVE_SQLITE= install
-cd ..
-
-pip3 install --disable-pip-version-check --user flake8 hacking
-pip3 install --user --upgrade docutils
-
-if [ "$M32" ]; then
- # Installing 32-bit libraries.
- # 32-bit and 64-bit libunwind can not be installed at the same time.
- # This will remove the 64-bit libunwind and install 32-bit version.
- sudo apt-get install -y \
- libunwind-dev:i386 libunbound-dev:i386 gcc-multilib
-fi
-
-# IPv6 is supported by kernel but disabled in TravisCI images:
-# https://github.com/travis-ci/travis-ci/issues/8891
-# Enable it to avoid skipping of IPv6 related tests.
-sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
+++ /dev/null
-#!/bin/bash
-
-set -o errexit
-
-CFLAGS="-Werror $CFLAGS"
-EXTRA_OPTS=""
-
-function configure_ovs()
-{
- ./boot.sh && ./configure $*
-}
-
-configure_ovs $EXTRA_OPTS $*
-
-if [ "$CC" = "clang" ]; then
- set make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
-else
- set make CFLAGS="$CFLAGS $BUILD_ENV"
-fi
-if ! "$@"; then
- cat config.log
- exit 1
-fi
-if [ "$TESTSUITE" ] && [ "$CC" != "clang" ]; then
- if ! make distcheck RECHECK=yes; then
- # testsuite.log is necessary for debugging.
- cat */_build/sub/tests/testsuite.log
- exit 1
- fi
-fi
-
-exit 0
+++ /dev/null
-#!/bin/bash
-set -ev
-pip3 install --user --upgrade docutils
feature. A bug fix patch should preferably add a test that would
fail if the bug recurs.
-If you are using GitHub, then you may utilize the travis-ci.org CI build system
-by linking your GitHub repository to it. This will run some of the above tests
-automatically when you push changes to your repository. See the "Continuous
-Integration with Travis-CI" in :doc:`/topics/testing` for details on how to set
-it up.
+If you are using GitHub, then you may utilize the travis-ci.org and the GitHub
+Actions CI build systems. They will run some of the above tests automatically
+when you push changes to your repository. See the "Continuous Integration with
+Travis-CI" in :doc:`/topics/testing` for details on how to set it up.
Email Subject
-------------
MAINTAINERS.rst \
README.rst \
NOTICE \
+ .ci/linux-build.sh \
+ .ci/linux-prepare.sh \
+ .ci/osx-build.sh \
+ .ci/osx-prepare.sh \
.cirrus.yml \
+ .github/workflows/build-and-test.yml \
.travis.yml \
- .travis/linux-build.sh \
- .travis/linux-prepare.sh \
- .travis/osx-build.sh \
- .travis/osx-prepare.sh \
appveyor.yml \
boot.sh \
poc/builders/Vagrantfile \
"secondary", respectively, for OpenFlow connection roles.
* The term "slave" has been replaced by "member", for bonds, LACP, and
OpenFlow bundle actions.
+ - Support for GitHub Actions based continuous integration builds has been
+ added.
v2.14.0 - 17 Aug 2020
Open vSwitch
============
+.. image:: https://github.com/openvswitch/ovs/workflows/Build%20and%20Test/badge.svg
+ :target: https://github.com/openvswitch/ovs/actions
.. image:: https://travis-ci.org/openvswitch/ovs.png
:target: https://travis-ci.org/openvswitch/ovs
.. image:: https://ci.appveyor.com/api/projects/status/github/openvswitch/ovs?branch=master&svg=true&retina=true