There can be cases such as containers or other runtime environments where DPDK may not be able to access the default runtime path. This patch introduces DPDK_RUNTIME_DIR as an environment variable to allow controlling and overriding the path.
The example we have is DPDK application running in an untrusted systemd container. In this case, it is not root, and XDG_RUNTIME_DIR is not set (since it is not a user application), and /tmp is blocked. The correct place for this application is to use /run. In any case, hard coded path assumptions are a problem. Signed-off-by: Stephen Hemminger <step...@networkplumber.org> --- lib/librte_eal/linux/eal.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/linux/eal.c b/lib/librte_eal/linux/eal.c index 6c34ac890386..f2a5e73817d6 100644 --- a/lib/librte_eal/linux/eal.c +++ b/lib/librte_eal/linux/eal.c @@ -90,20 +90,26 @@ static const char *default_runtime_dir = "/var/run"; int eal_create_runtime_dir(void) { - const char *directory = default_runtime_dir; + const char *directory; const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR"); const char *fallback = "/tmp"; char run_dir[PATH_MAX]; char tmp[PATH_MAX]; int ret; - if (getuid() != 0) { + directory = getenv("DPDK_RUNTIME_DIR"); + if (directory != NULL) { + RTE_LOG(DEBUG, EAL, "Using DPDK runtime directory: %s\n", directory); + } else if (getuid() == 0) { + directory = default_runtime_dir; + } else { /* try XDG path first, fall back to /tmp */ if (xdg_runtime_dir != NULL) directory = xdg_runtime_dir; else directory = fallback; } + /* create DPDK subdirectory under runtime dir */ ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory); if (ret < 0 || ret == sizeof(tmp)) { -- 2.30.1