ARG FROM=docker.io/ubuntu:bionic FROM ${FROM} LABEL maintainer="cheng1.li@intel.com" # Options to compile ovs-dpdk either from source (DPDK and OVS) or # install it from package. By default package install is enabled. # For src compile pass following build-args. ARG OVS_SRC_COMPILE_VERSION="2.11.1" ARG DPDK_SRC_COMPILE_VERSION="18.11.5" # URL to fetch the code package from. The package name should follow # this naming convention: openvswitch-${OVS_SRC_COMPILE_VERSION}.tar.gz ARG OVS_SRC_URL="http://openvswitch.org/releases" # URL to fetch the code package from. The package name should follow # this naming convention: dpdk-${DPDK_SRC_COMPILE_VERSION}.tar.xz ARG DPDK_SRC_URL="http://fast.dpdk.org/rel" # Option to apply any patch to DPDK or OVS sources, in case using # source compilation. For this ensure the patch file is kept in # same folder as this Dockerfile, and pass following build-args. ARG OVS_PATCH_FILE_NAME="" ARG DPDK_PATCH_FILE_NAME="" # Any extra compile-time flags for OVS ARG OVS_EXTRA_COMPILE_FLAGS="" # Any extra compile-time flags for DPDK ARG DPDK_EXTRA_COMPILE_FLAGS="" ADD Dockerfile.ubuntu_bionic-dpdk ${OVS_PATCH_FILE_NAME}* ${DPDK_PATCH_FILE_NAME}* ./ RUN set -ex;\ rm -rf Dockerfile.ubuntu_bionic-dpdk ;\ apt-get update; \ if [ -n "$OVS_SRC_COMPILE_VERSION" -a -n "$DPDK_SRC_COMPILE_VERSION" ]; then \ if [ -n "$OVS_PATCH_FILE_NAME" ]; then \ OVS_PATCH_TMP_DIR=$(mktemp -d) ;\ mv ./${OVS_PATCH_FILE_NAME} ${OVS_PATCH_TMP_DIR}/${OVS_PATCH_FILE_NAME} ;\ fi ;\ if [ -n "$DPDK_PATCH_FILE_NAME" ]; then \ DPDK_PATCH_TMP_DIR=$(mktemp -d) ;\ mv ./${DPDK_PATCH_FILE_NAME} ${DPDK_PATCH_TMP_DIR}/${DPDK_PATCH_FILE_NAME} ;\ fi ;\ apt-get upgrade -y ;\ apt-get install --no-install-recommends -y \ bash ;\ apt-get install --no-install-recommends -y \ build-essential \ curl \ libatomic1 \ libssl1.1 \ openssl \ uuid-runtime \ graphviz \ autoconf \ automake \ bzip2 \ debhelper \ dh-autoreconf \ libssl-dev \ libtool \ python-all \ python-six \ python-twisted-conch \ python-zopeinterface \ libpcap-dev \ libnuma-dev ;\ TMP_DIR=$(mktemp -d) ;\ curl -sSL ${DPDK_SRC_URL}/dpdk-${DPDK_SRC_COMPILE_VERSION}.tar.xz | tar xJ -C ${TMP_DIR} --strip-components=1 ;\ export DPDK_DIR=${TMP_DIR} ;\ cd ${DPDK_DIR} ;\ if [ -d "$DPDK_PATCH_TMP_DIR" ]; then \ patch -p1 < ${DPDK_PATCH_TMP_DIR}/${DPDK_PATCH_FILE_NAME} ;\ fi ;\ export DPDK_TARGET=x86_64-native-linuxapp-gcc ;\ export DPDK_BUILD=${DPDK_DIR}/build ;\ make config T=${DPDK_TARGET} ;\ cd ${DPDK_BUILD} ;\ sed -i 's/CONFIG_RTE_KNI_KMOD=.*$/CONFIG_RTE_KNI_KMOD=n/' .config ;\ sed -i 's/CONFIG_RTE_LIBRTE_KNI=.*$/CONFIG_RTE_LIBRTE_KNI=n/' .config ;\ sed -i 's/CONFIG_RTE_EAL_IGB_UIO=.*$/CONFIG_RTE_EAL_IGB_UIO=n/' .config ;\ make -j $(nproc) EXTRA_CFLAGS='-Ofast -fPIC' MACHINE_CFLAGS="-march=native" ${DPDK_EXTRA_COMPILE_FLAGS};\ make install ;\ TMP_DIR=$(mktemp -d) ;\ curl -sSL ${OVS_SRC_URL}/openvswitch-${OVS_SRC_COMPILE_VERSION}.tar.gz | tar xz -C ${TMP_DIR} --strip-components=1 ;\ cd ${TMP_DIR} ;\ if [ -d "$OVS_PATCH_TMP_DIR" ]; then \ patch -p1 < ${OVS_PATCH_TMP_DIR}/${OVS_PATCH_FILE_NAME} ;\ fi ;\ ./boot.sh ;\ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-dpdk=$DPDK_BUILD CFLAGS="-Ofast -g -march=native" ${OVS_EXTRA_COMPILE_FLAGS} ;\ make -j $(nproc) CFLAGS="-Ofast -g -march=native" ${OVS_EXTRA_COMPILE_FLAGS} ;\ make install ;\ cd / ;\ rm -rf ${DPDK_DIR} ;\ rm -rf ${TMP_DIR} ;\ rm -rf ${OVS_PATCH_TMP_DIR} ;\ rm -rf ${DPDK_PATCH_TMP_DIR} ;\ apt-get purge --auto-remove -y \ build-essential \ curl \ graphviz \ autoconf \ automake \ bzip2 \ debhelper \ dh-autoreconf \ libssl-dev \ libtool \ python-all \ python-six \ python-twisted-conch \ python-zopeinterface ;\ else \ apt-get install -y openvswitch-switch-dpdk ;\ update-alternatives --set ovs-vswitchd /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk ;\ fi ;\ apt-get install --no-install-recommends -y iproute2 tcpdump conntrack ;\ apt-get install --no-install-recommends -y python3 python3-dev python3-pip python3-setuptools ;\ pip3 --no-cache-dir install ovs netifaces ;\ rm -rf /var/lib/apt/lists/* ;\