]> git.droids-corp.org - dpdk.git/commitdiff
support systemd service convention for runtime directory
authorStephen Hemminger <stephen@networkplumber.org>
Wed, 9 Feb 2022 06:54:02 +0000 (22:54 -0800)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 9 Feb 2022 18:12:40 +0000 (19:12 +0100)
Systemd.exec supports configuring the runtime directory of a service
via RuntimeDirectory=. This creates the directory with the necessary
permissions which actual service may not have if running in container.

The change to DPDK is to look for the environment RUNTIME_DIRECTORY
first and use that in preference to the fallback alternatives.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
lib/eal/linux/eal.c
usertools/dpdk-telemetry.py

index e37372ac73052c0ab04145386b5060ac8265f0cd..e9764f6c9f37eab8778012bc51310214344f62a8 100644 (file)
@@ -86,25 +86,28 @@ struct lcore_config lcore_config[RTE_MAX_LCORE];
 /* used by rte_rdtsc() */
 int rte_cycles_vmware_tsc_map;
 
-static const char *default_runtime_dir = "/var/run";
-
 int
 eal_create_runtime_dir(void)
 {
-       const char *directory = default_runtime_dir;
-       const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
-       const char *fallback = "/tmp";
+       const char *directory;
        char run_dir[PATH_MAX];
        char tmp[PATH_MAX];
        int ret;
 
-       if (getuid() != 0) {
-               /* try XDG path first, fall back to /tmp */
-               if (xdg_runtime_dir != NULL)
-                       directory = xdg_runtime_dir;
+       /* from RuntimeDirectory= see systemd.exec */
+       directory = getenv("RUNTIME_DIRECTORY");
+       if (directory == NULL) {
+               /*
+                * Used standard convention defined in
+                * XDG Base Directory Specification and
+                * Filesystem Hierarchy Standard.
+                */
+               if (getuid() == 0)
+                       directory = "/var/run";
                else
-                       directory = fallback;
+                       directory = getenv("XDG_RUNTIME_DIR") ? : "/tmp";
        }
+
        /* create DPDK subdirectory under runtime dir */
        ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory);
        if (ret < 0 || ret == sizeof(tmp)) {
index 5b3bf83356c35a909a4d140dbf6d05c021683eb3..a81868a5478984188cdf910c4f020e64f9095bec 100755 (executable)
@@ -75,9 +75,13 @@ def print_socket_options(prefix, paths):
 def get_dpdk_runtime_dir(fp):
     """ Using the same logic as in DPDK's EAL, get the DPDK runtime directory
     based on the file-prefix and user """
-    if (os.getuid() == 0):
-        return os.path.join('/var/run/dpdk', fp)
-    return os.path.join(os.environ.get('XDG_RUNTIME_DIR', '/tmp'), 'dpdk', fp)
+    run_dir = os.environ.get('RUNTIME_DIRECTORY')
+    if not run_dir:
+        if (os.getuid() == 0):
+            run_dir = '/var/run'
+        else:
+            run_dir = os.environ.get('XDG_RUNTIME_DIR', '/tmp')
+    return os.path.join(run_dir, 'dpdk', fp)
 
 
 def list_fp():