summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/CMakeLists.txt62
-rw-r--r--support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch17
-rw-r--r--support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch71
-rw-r--r--support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch11
-rw-r--r--support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch15
-rw-r--r--support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch11
-rw-r--r--support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch54
-rw-r--r--support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch13
-rw-r--r--support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch12
-rw-r--r--support/dpdk/dpdk-21.11.4-macro-adjust.patch19
-rw-r--r--support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch10
-rw-r--r--support/dpdk/dpdk-21.11.4-memzone-namesize.patch11
-rw-r--r--support/dpdk/dpdk-21.11.4-mp-max-fds.patch11
-rwxr-xr-xsupport/dpdk/dpdk-21.11.4.tar.xzbin0 -> 15166036 bytes
14 files changed, 317 insertions, 0 deletions
diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt
index 0cd3c60..21bf8a4 100644
--- a/support/CMakeLists.txt
+++ b/support/CMakeLists.txt
@@ -102,3 +102,65 @@ set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_LOCATION ${INSTAL
set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto)
set_property(TARGET libevent-static-pthreads PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
+
+# Merge multiple patches into one patch file
+set(DPDK_PATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dpdk)
+set(MERGED_PATCH_FILE "${CMAKE_BINARY_DIR}/merged_patches.patch")
+set(DPDP_PATCH_FILES ${DPDK_PATCH_DIR}/dpdk-21.11.4-memzone-namesize.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-fm10k-rxtx-vec.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-mempool-ops-get-count.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-bypass-flow-err-func.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-mp-max-fds.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-devbind-dump.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-hugepages-path.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-pcapng-path.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-extend-max-virtqueue-pairs.patch
+ ${DPDK_PATCH_DIR}/dpdk-21.11.4-macro-adjust.patch)
+execute_process(COMMAND cat ${DPDP_PATCH_FILES} OUTPUT_FILE ${MERGED_PATCH_FILE})
+
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(DPDK_BUILD_TYPE debug)
+else()
+ set(DPDK_BUILD_TYPE debugoptimized)
+endif()
+
+set(DPDK_MESON_DISABLED_DRIVERS "common/cpt,common/dpaax,common/octeontx,common/octeontx2,common/sfc_efx,\
+ common/qat,bus/dpaa,bus/fslmc,bus/ifpga,bus/vmbus,mempool/bucket,mempool/dpaa,\
+ mempool/dpaa2,mempool/octeontx,mempool/octeontx2,mempool/stack,raw/ifpga,raw/ioat,\
+ raw/ntb,raw/octeontx2_dma,raw/octeontx2_ep,raw/skeleton,compress/zlib,regex/octeontx2,\
+ vdpa/ifc,event/skeleton,event/dlb,event/dlb2,event/opdl,sevent/keleton,event/sw,event/dsw,\
+ baseband/null,baseband/turbo_sw,baseband/fpga_lte_fec,baseband/fpga_5gnr_fec,baseband/acc100,\
+ crypto/bcmfs,crypto/ccp,crypto/nitrox,crypto/null,crypto/openssl,crypto/scheduler,crypto/virtio")
+
+# Although default_library=static has been set, both dynamic and static libraries are compiled. a little strange
+ExternalProject_Add(dpdk PREFIX dpdk
+ URL ${CMAKE_CURRENT_SOURCE_DIR}/dpdk/dpdk-21.11.4.tar.xz
+ URL_MD5 b24201da07d3fd87cacc2aa03586aed3
+ PATCH_COMMAND
+ COMMAND patch -Ns -p1 -i ${MERGED_PATCH_FILE}
+ CONFIGURE_COMMAND
+ COMMAND meson -Dc_args=-DRTE_ETHDEV_PROFILE_WITH_VTUNE -Ddisable_drivers=${DPDK_MESON_DISABLED_DRIVERS} -Dprefix=<INSTALL_DIR> -Dmachine=${MACHINE} -Dibverbs_link=dlopen -Dbuildtype=${DPDK_BUILD_TYPE} build
+ BUILD_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ninja
+ INSTALL_COMMAND
+ COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ninja install
+ COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build rm -f <INSTALL_DIR>/lib64/libdpdk.a
+ COMMAND ${CMAKE_COMMAND} -E chdir <INSTALL_DIR>/lib64 sh -c "ar crsT <INSTALL_DIR>/lib64/libdpdk.a <INSTALL_DIR>/lib64/*.a"
+ BUILD_IN_SOURCE 1)
+
+ExternalProject_Get_Property(dpdk INSTALL_DIR)
+file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
+set(DPDK_ROOT_DIR ${INSTALL_DIR} CACHE PATH "DPDK root path")
+message(STATUS "DPDK_ROOT_DIR: ${DPDK_ROOT_DIR}")
+
+find_library(M_LIB m)
+
+add_library(libdpdk STATIC IMPORTED GLOBAL)
+add_dependencies(libdpdk dpdk)
+set_target_properties(libdpdk PROPERTIES
+ IMPORTED_LOCATION ${M_LIB}
+ INTERFACE_LINK_DIRECTORIES ${INSTALL_DIR}/lib64
+ INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include
+ INTERFACE_LINK_LIBRARIES "-Wl,--whole-archive;${INSTALL_DIR}/lib64/libdpdk.a;-Wl,--no-whole-archive;rt;m;dl;pcap;numa;ibverbs;mlx5"
+) \ No newline at end of file
diff --git a/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch b/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch
new file mode 100644
index 0000000..63d8c60
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch
@@ -0,0 +1,17 @@
+--- dpdk-stable-21.11.4/lib/ethdev/rte_flow.c 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/ethdev/rte_flow.c 2023-06-26 07:36:38.124747070 -0400
+@@ -310,12 +310,14 @@ fts_exit(struct rte_eth_dev *dev)
+ static int
+ flow_err(uint16_t port_id, int ret, struct rte_flow_error *error)
+ {
++#if 0
+ if (ret == 0)
+ return 0;
+ if (rte_eth_dev_is_removed(port_id))
+ return rte_flow_error_set(error, EIO,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, rte_strerror(EIO));
++#endif
+ return ret;
+ }
+
diff --git a/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch b/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch
new file mode 100644
index 0000000..e4b4026
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch
@@ -0,0 +1,71 @@
+--- dpdk-stable-21.11.4/usertools/dpdk-devbind.py 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/usertools/dpdk-devbind.py 2023-06-26 07:47:31.226072861 -0400
+@@ -8,6 +8,7 @@ import os
+ import subprocess
+ import argparse
+ import platform
++import json
+
+ from glob import glob
+ from os.path import exists, basename
+@@ -95,6 +96,7 @@ loaded_modules = None
+ # command-line arg flags
+ b_flag = None
+ status_flag = False
++dump_flag = False
+ force_flag = False
+ args = []
+
+@@ -577,6 +579,11 @@ def show_device_status(devices_type, dev
+ display_devices("%s devices using kernel driver" % device_name, kernel_drv,
+ if_text + "drv=%(Driver_str)s "
+ "unused=%(Module_str)s %(Active)s")
++ if dump_flag and dump_path == 'stdout':
++ print(kernel_drv)
++ if dump_flag and dump_path != 'stdout':
++ f = open(dump_path, "w")
++ f.write(json.dumps(kernel_drv, sort_keys=True,indent=4))
+ if no_drv:
+ display_devices("Other %s devices" % device_name, no_drv,
+ "unused=%(Module_str)s")
+@@ -635,6 +642,8 @@ def parse_args():
+ global status_dev
+ global force_flag
+ global args
++ global dump_flag
++ global dump_path
+
+ parser = argparse.ArgumentParser(
+ description='Utility to bind and unbind devices from Linux kernel',
+@@ -649,6 +658,9 @@ To display current device status:
+ To display current network device status:
+ %(prog)s --status-dev net
+
++To dump current kernel network device status for json:
++ %(prog)s --status-dev net --dump ('stdout' | 'path')
++
+ To bind eth1 from the current driver and move to use vfio-pci
+ %(prog)s --bind=vfio-pci eth1
+
+@@ -669,6 +681,11 @@ To bind 0000:02:00.0 and 0000:02:00.1 to
+ help="Print the status of given device group.",
+ choices=['baseband', 'compress', 'crypto', 'dma', 'event',
+ 'mempool', 'misc', 'net', 'regex'])
++ parser.add_argument(
++ '-d',
++ '--dump',
++ help="Dump the status of kernel net group.")
++
+ bind_group = parser.add_mutually_exclusive_group()
+ bind_group.add_argument(
+ '-b',
+@@ -701,6 +718,9 @@ For devices bound to Linux kernel driver
+ if opt.status_dev:
+ status_flag = True
+ status_dev = opt.status_dev
++ if opt.dump:
++ dump_flag = True
++ dump_path = opt.dump
+ if opt.status:
+ status_flag = True
+ status_dev = "all"
diff --git a/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch b/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch
new file mode 100644
index 0000000..aec7534
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch
@@ -0,0 +1,11 @@
+--- dpdk-stable-21.11.4/usertools/dpdk-hugepages.py 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/usertools/dpdk-hugepages.py 2023-06-26 07:51:06.843528457 -0400
+@@ -14,7 +14,7 @@ from math import log2
+ BINARY_PREFIX = "KMG"
+
+ # systemd mount point for huge pages
+-HUGE_MOUNT = "/dev/hugepages"
++HUGE_MOUNT = "/var/run/mrzcpd/huge_pages"
+
+
+ def fmt_memsize(kb):
diff --git a/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch b/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch
new file mode 100644
index 0000000..859df2a
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch
@@ -0,0 +1,15 @@
+--- dpdk-stable-21.11.4/lib/pcapng/rte_pcapng.c 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/pcapng/rte_pcapng.c 2023-06-26 07:53:17.116595350 -0400
+@@ -214,10 +214,11 @@ pcapng_add_interface(rte_pcapng_t *self,
+ "%s-%s", dev->bus->name, dev->name);
+
+ /* DPDK reports in units of Mbps */
++ #if 0
+ if (rte_eth_link_get(port, &link) == 0 &&
+ link.link_status == RTE_ETH_LINK_UP)
+ speed = link.link_speed * PCAPNG_MBPS_SPEED;
+-
++ #endif
+ if (rte_eth_macaddr_get(port, &macaddr) < 0)
+ ea = NULL;
+ else
diff --git a/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch b/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch
new file mode 100644
index 0000000..2bab48d
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch
@@ -0,0 +1,11 @@
+--- dpdk-stable-21.11.4/drivers/net/virtio/virtio.h 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/drivers/net/virtio/virtio.h 2023-06-26 07:55:50.537496443 -0400
+@@ -127,7 +127,7 @@
+ /*
+ * Maximum number of virtqueues per device.
+ */
+-#define VIRTIO_MAX_VIRTQUEUE_PAIRS 8
++#define VIRTIO_MAX_VIRTQUEUE_PAIRS 32
+ #define VIRTIO_MAX_VIRTQUEUES (VIRTIO_MAX_VIRTQUEUE_PAIRS * 2 + 1)
+
+ /* VirtIO device IDs. */
diff --git a/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch b/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch
new file mode 100644
index 0000000..b0321aa
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch
@@ -0,0 +1,54 @@
+--- dpdk-stable-21.11.4/drivers/net/af_packet/rte_eth_af_packet.c 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/drivers/net/af_packet/rte_eth_af_packet.c 2023-06-26 07:58:57.931154196 -0400
+@@ -322,25 +322,7 @@ eth_dev_start(struct rte_eth_dev *dev)
+ static int
+ eth_dev_stop(struct rte_eth_dev *dev)
+ {
+- unsigned i;
+- int sockfd;
+- struct pmd_internals *internals = dev->data->dev_private;
+
+- for (i = 0; i < internals->nb_queues; i++) {
+- sockfd = internals->rx_queue[i].sockfd;
+- if (sockfd != -1)
+- close(sockfd);
+-
+- /* Prevent use after free in case tx fd == rx fd */
+- if (sockfd != internals->tx_queue[i].sockfd) {
+- sockfd = internals->tx_queue[i].sockfd;
+- if (sockfd != -1)
+- close(sockfd);
+- }
+-
+- internals->rx_queue[i].sockfd = -1;
+- internals->tx_queue[i].sockfd = -1;
+- }
+
+ dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN;
+ return 0;
+@@ -445,6 +427,25 @@ eth_dev_close(struct rte_eth_dev *dev)
+
+ internals = dev->data->dev_private;
+ req = &internals->req;
++
++ int sockfd;
++ for (q = 0; q < internals->nb_queues; q++) {
++ sockfd = internals->rx_queue[q].sockfd;
++ if (sockfd != -1)
++ close(sockfd);
++
++ /* Prevent use after free in case tx fd == rx fd */
++ if (sockfd != internals->tx_queue[q].sockfd) {
++ sockfd = internals->tx_queue[q].sockfd;
++ if (sockfd != -1)
++ close(sockfd);
++ }
++
++ internals->rx_queue[q].sockfd = -1;
++ internals->tx_queue[q].sockfd = -1;
++ }
++
++
+ for (q = 0; q < internals->nb_queues; q++) {
+ munmap(internals->rx_queue[q].map,
+ 2 * req->tp_block_size * req->tp_block_nr);
diff --git a/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch b/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch
new file mode 100644
index 0000000..6491480
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch
@@ -0,0 +1,13 @@
+--- dpdk-stable-21.11.4/lib/eal/linux/eal_memalloc.c 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/eal/linux/eal_memalloc.c 2023-06-26 08:01:31.809052011 -0400
+@@ -1420,8 +1420,8 @@ secondary_msl_create_walk(const struct r
+ local_msl = &local_memsegs[msl_idx];
+
+ /* create distinct fbarrays for each secondary */
+- snprintf(name, RTE_FBARRAY_NAME_LEN, "%s_%i",
+- primary_msl->memseg_arr.name, getpid());
++ snprintf(name, RTE_FBARRAY_NAME_LEN, "%s_%i_%"PRIx64,
++ primary_msl->memseg_arr.name, getpid(), rte_rdtsc());
+
+ ret = rte_fbarray_init(&local_msl->memseg_arr, name,
+ primary_msl->memseg_arr.len,
diff --git a/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch b/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch
new file mode 100644
index 0000000..fd50829
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch
@@ -0,0 +1,12 @@
+--- dpdk-stable-21.11.4/drivers/net/fm10k/meson.build 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/drivers/net/fm10k/meson.build 2023-06-26 08:03:51.289052958 -0400
+@@ -14,8 +14,6 @@ sources = files(
+ 'fm10k_ethdev.c',
+ 'fm10k_rxtx.c',
+ )
+-if arch_subdir == 'x86'
+- sources += files('fm10k_rxtx_vec.c')
+-endif
++
+
+ includes += include_directories('base')
diff --git a/support/dpdk/dpdk-21.11.4-macro-adjust.patch b/support/dpdk/dpdk-21.11.4-macro-adjust.patch
new file mode 100644
index 0000000..864c31d
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-macro-adjust.patch
@@ -0,0 +1,19 @@
+--- dpdk-stable-21.11.4/config/rte_config.h 2023-05-17 19:27:18.000000000 +0800
++++ dpdk-stable-21.11.4-mr4/config/rte_config.h 2023-12-26 17:01:15.180144454 +0800
+@@ -34,7 +34,7 @@
+ #define RTE_MAX_MEM_MB_PER_LIST 32768
+ #define RTE_MAX_MEMSEG_PER_TYPE 32768
+ #define RTE_MAX_MEM_MB_PER_TYPE 65536
+-#define RTE_MAX_MEMZONE 2560
++#define RTE_MAX_MEMZONE 125600
+ #define RTE_MAX_TAILQ 32
+ #define RTE_LOG_DP_LEVEL RTE_LOG_INFO
+ #define RTE_MAX_VFIO_CONTAINERS 64
+@@ -99,7 +99,7 @@
+
+ /* rte_graph defines */
+ #define RTE_GRAPH_BURST_SIZE 256
+-#define RTE_LIBRTE_GRAPH_STATS 1
++#define RTE_LIBRTE_GRAPH_STATS 10
+
+ /****** driver defines ********/
diff --git a/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch b/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch
new file mode 100644
index 0000000..aadac18
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch
@@ -0,0 +1,10 @@
+--- dpdk-stable-21.11.4/lib/mempool/version.map 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/mempool/version.map 2023-06-26 08:05:23.115396557 -0400
+@@ -31,6 +31,7 @@ DPDK_22 {
+ rte_mempool_register_ops;
+ rte_mempool_set_ops_byname;
+ rte_mempool_walk;
++ rte_mempool_ops_get_count;
+
+ local: *;
+ };
diff --git a/support/dpdk/dpdk-21.11.4-memzone-namesize.patch b/support/dpdk/dpdk-21.11.4-memzone-namesize.patch
new file mode 100644
index 0000000..377d37d
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-memzone-namesize.patch
@@ -0,0 +1,11 @@
+--- dpdk-stable-21.11.4/lib/eal/include/rte_memzone.h 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/eal/include/rte_memzone.h 2023-06-26 08:07:19.550564337 -0400
+@@ -48,7 +48,7 @@ extern "C" {
+ */
+ struct rte_memzone {
+
+-#define RTE_MEMZONE_NAMESIZE 32 /**< Maximum length of memory zone name.*/
++#define RTE_MEMZONE_NAMESIZE 64 /**< Maximum length of memory zone name.*/
+ char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the memory zone. */
+
+ rte_iova_t iova; /**< Start IO address. */
diff --git a/support/dpdk/dpdk-21.11.4-mp-max-fds.patch b/support/dpdk/dpdk-21.11.4-mp-max-fds.patch
new file mode 100644
index 0000000..90f94b8
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4-mp-max-fds.patch
@@ -0,0 +1,11 @@
+--- dpdk-stable-21.11.4/lib/eal/include/rte_eal.h 2023-05-17 07:27:18.000000000 -0400
++++ dpdk-stable-21.11.4-mr4/lib/eal/include/rte_eal.h 2023-06-26 08:09:03.956818093 -0400
+@@ -157,7 +157,7 @@ int rte_eal_primary_proc_alive(const cha
+ */
+ bool rte_mp_disable(void);
+
+-#define RTE_MP_MAX_FD_NUM 8 /* The max amount of fds */
++#define RTE_MP_MAX_FD_NUM 2048 /* The max amount of fds */
+ #define RTE_MP_MAX_NAME_LEN 64 /* The max length of action name */
+ #define RTE_MP_MAX_PARAM_LEN 256 /* The max length of param */
+ struct rte_mp_msg {
diff --git a/support/dpdk/dpdk-21.11.4.tar.xz b/support/dpdk/dpdk-21.11.4.tar.xz
new file mode 100755
index 0000000..4b35c80
--- /dev/null
+++ b/support/dpdk/dpdk-21.11.4.tar.xz
Binary files differ