DPDK patches and discussions
 help / color / mirror / Atom feed
* [RFC] eal: support systemd service convention for runtime directory
@ 2021-12-23 23:39 Stephen Hemminger
  2021-12-26 12:20 ` Morten Brørup
                   ` (3 more replies)
  0 siblings, 4 replies; 22+ messages in thread
From: Stephen Hemminger @ 2021-12-23 23:39 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

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>
---
 lib/eal/linux/eal.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 60b49248388e..e729c713b393 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -86,25 +86,26 @@ 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;
-		else
-			directory = fallback;
+	/* from RuntimeDirectory= see systemd.exec */
+	directory = getenv("RUNTIME_DIRECTORY");
+	if (directory == NULL) {
+		if (getuid() == 0)
+			directory = "/var/run";
+		else {
+			directory = getenv("XDG_RUNTIME_DIR");
+			if (directory == NULL)
+				directory = "/tmp";
+		}
 	}
+
 	/* create DPDK subdirectory under runtime dir */
 	ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory);
 	if (ret < 0 || ret == sizeof(tmp)) {
-- 
2.30.2


^ permalink raw reply	[flat|nested] 22+ messages in thread

* RE: [RFC] eal: support systemd service convention for runtime directory
  2021-12-23 23:39 [RFC] eal: support systemd service convention for runtime directory Stephen Hemminger
@ 2021-12-26 12:20 ` Morten Brørup
  2022-01-05 18:01   ` [RFC] eal: remove size for eal_set_runtime_dir Stephen Hemminger
  2022-01-07 12:07 ` [RFC] eal: support systemd service convention for runtime directory Bruce Richardson
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 22+ messages in thread
From: Morten Brørup @ 2021-12-26 12:20 UTC (permalink / raw)
  To: Stephen Hemminger, dev

> From: Stephen Hemminger [mailto:stephen@networkplumber.org]
> Sent: Friday, 24 December 2021 00.39
> 
> 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>
> ---
>  lib/eal/linux/eal.c | 23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
> index 60b49248388e..e729c713b393 100644
> --- a/lib/eal/linux/eal.c
> +++ b/lib/eal/linux/eal.c
> @@ -86,25 +86,26 @@ 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;
> -		else
> -			directory = fallback;
> +	/* from RuntimeDirectory= see systemd.exec */
> +	directory = getenv("RUNTIME_DIRECTORY");
> +	if (directory == NULL) {
> +		if (getuid() == 0)
> +			directory = "/var/run";
> +		else {
> +			directory = getenv("XDG_RUNTIME_DIR");
> +			if (directory == NULL)
> +				directory = "/tmp";
> +		}
>  	}
> +
>  	/* create DPDK subdirectory under runtime dir */
>  	ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory);
>  	if (ret < 0 || ret == sizeof(tmp)) {
> --
> 2.30.2
> 

Reviewed-by: Morten Brørup <mb@smartsharesystems.com>

Also, while reviewing this, I stumbled across eal_set_runtime_dir() in eal_common_config.c, which I think should be fixed:

int
eal_set_runtime_dir(char *run_dir, size_t size)
{
	size_t str_size;

-	str_size = strlcpy(runtime_dir, run_dir, size);
-	if (str_size >= size) {
+	str_size = strlcpy(runtime_dir, run_dir, sizeof(runtime_dir));
+	if (str_size >= sizeof(runtime_dir)) {
		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
		return -1;
	}

	return 0;
}

And I don't understand why size is passed as a parameter to eal_set_runtime_dir().


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [RFC] eal: remove size for eal_set_runtime_dir
  2021-12-26 12:20 ` Morten Brørup
@ 2022-01-05 18:01   ` Stephen Hemminger
  2022-01-05 20:04     ` Morten Brørup
  0 siblings, 1 reply; 22+ messages in thread
From: Stephen Hemminger @ 2022-01-05 18:01 UTC (permalink / raw)
  To: Morten Brørup; +Cc: dev, Stephen Hemminger

The size argument to eal_set_runtime_dir is useless and was
being used incorrectly in strlcpy. It worked only because
all callers passed PATH_MAX which is same as sizeof the destination
runtime_dir.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Suggested-by: Morten Brørup <mb@smartsharesystems.com>
---
 lib/eal/common/eal_common_config.c | 7 ++-----
 lib/eal/common/eal_private.h       | 4 +---
 lib/eal/freebsd/eal.c              | 2 +-
 lib/eal/linux/eal.c                | 2 +-
 4 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index 1c4c4dd585d0..62a9d7a198db 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -29,12 +29,9 @@ rte_eal_get_runtime_dir(void)
 }
 
 int
-eal_set_runtime_dir(char *run_dir, size_t size)
+eal_set_runtime_dir(const char *run_dir)
 {
-	size_t str_size;
-
-	str_size = strlcpy(runtime_dir, run_dir, size);
-	if (str_size >= size) {
+	if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
 		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
 		return -1;
 	}
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index 36bcc0b5a492..734f1f334b69 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -681,13 +681,11 @@ eal_mem_set_dump(void *virt, size_t size, bool dump);
  *
  * @param run_dir
  *   The new runtime directory path of DPDK
- * @param size
- *   The size of the new runtime directory path in bytes.
  * @return
  *   0 on success, (-1) on failure.
  */
 int
-eal_set_runtime_dir(char *run_dir, size_t size);
+eal_set_runtime_dir(const char *run_dir);
 
 /**
  * Get the internal configuration structure.
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index a1cd2462db1b..503e276dc27f 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -123,7 +123,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 80ffe1c7f9d8..a73ff75f65c9 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -135,7 +135,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 22+ messages in thread

* RE: [RFC] eal: remove size for eal_set_runtime_dir
  2022-01-05 18:01   ` [RFC] eal: remove size for eal_set_runtime_dir Stephen Hemminger
@ 2022-01-05 20:04     ` Morten Brørup
  0 siblings, 0 replies; 22+ messages in thread
From: Morten Brørup @ 2022-01-05 20:04 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

> From: Stephen Hemminger [mailto:stephen@networkplumber.org]
> Sent: Wednesday, 5 January 2022 19.02
> 
> The size argument to eal_set_runtime_dir is useless and was
> being used incorrectly in strlcpy. It worked only because
> all callers passed PATH_MAX which is same as sizeof the destination
> runtime_dir.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> Suggested-by: Morten Brørup <mb@smartsharesystems.com>
> ---
>  lib/eal/common/eal_common_config.c | 7 ++-----
>  lib/eal/common/eal_private.h       | 4 +---
>  lib/eal/freebsd/eal.c              | 2 +-
>  lib/eal/linux/eal.c                | 2 +-
>  4 files changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/lib/eal/common/eal_common_config.c
> b/lib/eal/common/eal_common_config.c
> index 1c4c4dd585d0..62a9d7a198db 100644
> --- a/lib/eal/common/eal_common_config.c
> +++ b/lib/eal/common/eal_common_config.c
> @@ -29,12 +29,9 @@ rte_eal_get_runtime_dir(void)
>  }
> 
>  int
> -eal_set_runtime_dir(char *run_dir, size_t size)
> +eal_set_runtime_dir(const char *run_dir)
>  {
> -	size_t str_size;
> -
> -	str_size = strlcpy(runtime_dir, run_dir, size);
> -	if (str_size >= size) {
> +	if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
>  		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
>  		return -1;
>  	}
> diff --git a/lib/eal/common/eal_private.h
> b/lib/eal/common/eal_private.h
> index 36bcc0b5a492..734f1f334b69 100644
> --- a/lib/eal/common/eal_private.h
> +++ b/lib/eal/common/eal_private.h
> @@ -681,13 +681,11 @@ eal_mem_set_dump(void *virt, size_t size, bool
> dump);
>   *
>   * @param run_dir
>   *   The new runtime directory path of DPDK
> - * @param size
> - *   The size of the new runtime directory path in bytes.
>   * @return
>   *   0 on success, (-1) on failure.
>   */
>  int
> -eal_set_runtime_dir(char *run_dir, size_t size);
> +eal_set_runtime_dir(const char *run_dir);
> 
>  /**
>   * Get the internal configuration structure.
> diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
> index a1cd2462db1b..503e276dc27f 100644
> --- a/lib/eal/freebsd/eal.c
> +++ b/lib/eal/freebsd/eal.c
> @@ -123,7 +123,7 @@ eal_create_runtime_dir(void)
>  		return -1;
>  	}
> 
> -	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
> +	if (eal_set_runtime_dir(run_dir))
>  		return -1;
> 
>  	return 0;
> diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
> index 80ffe1c7f9d8..a73ff75f65c9 100644
> --- a/lib/eal/linux/eal.c
> +++ b/lib/eal/linux/eal.c
> @@ -135,7 +135,7 @@ eal_create_runtime_dir(void)
>  		return -1;
>  	}
> 
> -	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
> +	if (eal_set_runtime_dir(run_dir))
>  		return -1;
> 
>  	return 0;
> --
> 2.30.2
> 

Reviewed-by: Morten Brørup<mb@smartsharesystems.com>


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [RFC] eal: support systemd service convention for runtime directory
  2021-12-23 23:39 [RFC] eal: support systemd service convention for runtime directory Stephen Hemminger
  2021-12-26 12:20 ` Morten Brørup
@ 2022-01-07 12:07 ` Bruce Richardson
  2022-02-02 21:03   ` Thomas Monjalon
  2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
  3 siblings, 1 reply; 22+ messages in thread
From: Bruce Richardson @ 2022-01-07 12:07 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

On Thu, Dec 23, 2021 at 03:39:07PM -0800, Stephen Hemminger wrote:
> 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>
> ---
>  lib/eal/linux/eal.c | 23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
> 
Seems reasonable. The path lookup for telemetry in the dpdk-telemetry.py
script will need updating to match this.

Otherwise:

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [RFC] eal: support systemd service convention for runtime directory
  2022-01-07 12:07 ` [RFC] eal: support systemd service convention for runtime directory Bruce Richardson
@ 2022-02-02 21:03   ` Thomas Monjalon
  2022-02-02 21:07     ` Stephen Hemminger
  0 siblings, 1 reply; 22+ messages in thread
From: Thomas Monjalon @ 2022-02-02 21:03 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, Bruce Richardson, david.marchand

07/01/2022 13:07, Bruce Richardson:
> On Thu, Dec 23, 2021 at 03:39:07PM -0800, Stephen Hemminger wrote:
> > 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>
> > ---
> >  lib/eal/linux/eal.c | 23 ++++++++++++-----------
> >  1 file changed, 12 insertions(+), 11 deletions(-)
> > 
> Seems reasonable. The path lookup for telemetry in the dpdk-telemetry.py
> script will need updating to match this.

Any followup?
Do you plan a v2 to address comments from Morten and Bruce?




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [RFC] eal: support systemd service convention for runtime directory
  2022-02-02 21:03   ` Thomas Monjalon
@ 2022-02-02 21:07     ` Stephen Hemminger
  0 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-02 21:07 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, Bruce Richardson, david.marchand

On Wed, 02 Feb 2022 22:03:44 +0100
Thomas Monjalon <thomas@monjalon.net> wrote:

> 07/01/2022 13:07, Bruce Richardson:
> > On Thu, Dec 23, 2021 at 03:39:07PM -0800, Stephen Hemminger wrote:  
> > > 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>
> > > ---
> > >  lib/eal/linux/eal.c | 23 ++++++++++++-----------
> > >  1 file changed, 12 insertions(+), 11 deletions(-)
> > >   
> > Seems reasonable. The path lookup for telemetry in the dpdk-telemetry.py
> > script will need updating to match this.  
> 
> Any followup?
> Do you plan a v2 to address comments from Morten and Bruce?

Was waiting for any more responses, not urgent

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 0/2] better support of configuring runtime directory
  2021-12-23 23:39 [RFC] eal: support systemd service convention for runtime directory Stephen Hemminger
  2021-12-26 12:20 ` Morten Brørup
  2022-01-07 12:07 ` [RFC] eal: support systemd service convention for runtime directory Bruce Richardson
@ 2022-02-03  6:00 ` Stephen Hemminger
  2022-02-03  6:00   ` [PATCH 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
                     ` (2 more replies)
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
  3 siblings, 3 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-03  6:00 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Found this while exploring running a DPDK service with systemd
container environment. It helps if the place DPDK puts its runtime
directory is configurable.

This version supersedes earlier RFC and includes the feedback.

Stephen Hemminger (2):
  eal: remove size for eal_set_runtime_dir
  eal: support systemd service convention for runtime directory

 lib/eal/common/eal_common_config.c |  7 ++-----
 lib/eal/common/eal_private.h       |  4 +---
 lib/eal/freebsd/eal.c              |  2 +-
 lib/eal/linux/eal.c                | 25 ++++++++++++++-----------
 usertools/dpdk-telemetry.py        |  9 +++++++--
 5 files changed, 25 insertions(+), 22 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 1/2] eal: remove size for eal_set_runtime_dir
  2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
@ 2022-02-03  6:00   ` Stephen Hemminger
  2022-02-03  6:00   ` [PATCH 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
  2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-03  6:00 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, talshn, Morten Brørup

The size argument to eal_set_runtime_dir is useless and was
being used incorrectly in strlcpy. It worked only because
all callers passed PATH_MAX which is same as sizeof the destination
runtime_dir.

Note: this is an internal API so no user exposed change.

Fixes: 57a2efb30477 ("eal: move OS common config objects")
Cc: talshn@mellanox.com
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Morten Brørup<mb@smartsharesystems.com>
---
 lib/eal/common/eal_common_config.c | 7 ++-----
 lib/eal/common/eal_private.h       | 4 +---
 lib/eal/freebsd/eal.c              | 2 +-
 lib/eal/linux/eal.c                | 2 +-
 4 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index 1c4c4dd585d0..62a9d7a198db 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -29,12 +29,9 @@ rte_eal_get_runtime_dir(void)
 }
 
 int
-eal_set_runtime_dir(char *run_dir, size_t size)
+eal_set_runtime_dir(const char *run_dir)
 {
-	size_t str_size;
-
-	str_size = strlcpy(runtime_dir, run_dir, size);
-	if (str_size >= size) {
+	if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
 		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
 		return -1;
 	}
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index 36bcc0b5a492..734f1f334b69 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -681,13 +681,11 @@ eal_mem_set_dump(void *virt, size_t size, bool dump);
  *
  * @param run_dir
  *   The new runtime directory path of DPDK
- * @param size
- *   The size of the new runtime directory path in bytes.
  * @return
  *   0 on success, (-1) on failure.
  */
 int
-eal_set_runtime_dir(char *run_dir, size_t size);
+eal_set_runtime_dir(const char *run_dir);
 
 /**
  * Get the internal configuration structure.
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index a1cd2462db1b..503e276dc27f 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -123,7 +123,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 60b49248388e..f2551c64b10c 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -137,7 +137,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 2/2] eal: support systemd service convention for runtime directory
  2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
  2022-02-03  6:00   ` [PATCH 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
@ 2022-02-03  6:00   ` Stephen Hemminger
  2022-02-03 11:37     ` Bruce Richardson
  2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2 siblings, 1 reply; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-03  6:00 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Bruce Richardson, Morten Brørup

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         | 23 +++++++++++++----------
 usertools/dpdk-telemetry.py |  9 +++++++--
 2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index f2551c64b10c..8a5723f3b3a7 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -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 Hierachy 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)) {
diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py
index 5b3bf83356c3..a49f0e76d07b 100755
--- a/usertools/dpdk-telemetry.py
+++ b/usertools/dpdk-telemetry.py
@@ -75,9 +75,14 @@ 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 """
+    run_dir = os.environ.get('RUNTIME_DIRECTORY')
+    if run_dir:
+        return run_dir
     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 = '/var/run'
+    else:
+        run_dir = os.environ.get('XDG_RUNTIME_DIR', '/tmp'))
+    return os.path.join(run_dir, 'dpdk', fp)
 
 
 def list_fp():
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/2] eal: support systemd service convention for runtime directory
  2022-02-03  6:00   ` [PATCH 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
@ 2022-02-03 11:37     ` Bruce Richardson
  0 siblings, 0 replies; 22+ messages in thread
From: Bruce Richardson @ 2022-02-03 11:37 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, Morten Brørup

On Wed, Feb 02, 2022 at 10:00:25PM -0800, Stephen Hemminger wrote:
> 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         | 23 +++++++++++++----------
>  usertools/dpdk-telemetry.py |  9 +++++++--
>  2 files changed, 20 insertions(+), 12 deletions(-)
> 
> diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
> index f2551c64b10c..8a5723f3b3a7 100644
> --- a/lib/eal/linux/eal.c
> +++ b/lib/eal/linux/eal.c
> @@ -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 Hierachy 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)) {
> diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py
> index 5b3bf83356c3..a49f0e76d07b 100755
> --- a/usertools/dpdk-telemetry.py
> +++ b/usertools/dpdk-telemetry.py
> @@ -75,9 +75,14 @@ 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 """
> +    run_dir = os.environ.get('RUNTIME_DIRECTORY')
> +    if run_dir:
> +        return run_dir

This bit doesn't seem to match the EAL changes above, since in the EAL code
you are still appending the "dpdk" suffixes to the value returned from
RUNTIME_DIRECTORY.

>      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 = '/var/run'
> +    else:
> +        run_dir = os.environ.get('XDG_RUNTIME_DIR', '/tmp'))
> +    return os.path.join(run_dir, 'dpdk', fp)
>  
>  
>  def list_fp():
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 0/2] eal: support configuring runtime directory
  2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
  2022-02-03  6:00   ` [PATCH 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
  2022-02-03  6:00   ` [PATCH 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
@ 2022-02-05 17:10   ` Stephen Hemminger
  2022-02-05 17:11     ` [PATCH v2 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
                       ` (2 more replies)
  2 siblings, 3 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-05 17:10 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Found this while exploring running a DPDK service with systemd
container environment. It helps if the place DPDK puts its runtime
directory is configurable.

v2 - fix dpdk_telemetry.py to use append dpdk

Stephen Hemminger (2):
  eal: remove size for eal_set_runtime_dir
  eal: support systemd service convention for runtime directory

 lib/eal/common/eal_common_config.c |  7 ++-----
 lib/eal/common/eal_private.h       |  4 +---
 lib/eal/freebsd/eal.c              |  2 +-
 lib/eal/linux/eal.c                | 25 ++++++++++++++-----------
 usertools/dpdk-telemetry.py        | 10 +++++++---
 5 files changed, 25 insertions(+), 23 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 1/2] eal: remove size for eal_set_runtime_dir
  2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
@ 2022-02-05 17:11     ` Stephen Hemminger
  2022-02-05 17:11     ` [PATCH v2 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
  2022-02-08  4:43     ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-05 17:11 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Morten Brørup

The size argument to eal_set_runtime_dir is useless and was
being used incorrectly in strlcpy. It worked only because
all callers passed PATH_MAX which is same as sizeof the destination
runtime_dir.

Note: this is an internal API so no user exposed change.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Morten Brørup<mb@smartsharesystems.com>
---
 lib/eal/common/eal_common_config.c | 7 ++-----
 lib/eal/common/eal_private.h       | 4 +---
 lib/eal/freebsd/eal.c              | 2 +-
 lib/eal/linux/eal.c                | 2 +-
 4 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index 1c4c4dd585d0..62a9d7a198db 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -29,12 +29,9 @@ rte_eal_get_runtime_dir(void)
 }
 
 int
-eal_set_runtime_dir(char *run_dir, size_t size)
+eal_set_runtime_dir(const char *run_dir)
 {
-	size_t str_size;
-
-	str_size = strlcpy(runtime_dir, run_dir, size);
-	if (str_size >= size) {
+	if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
 		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
 		return -1;
 	}
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index 36bcc0b5a492..734f1f334b69 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -681,13 +681,11 @@ eal_mem_set_dump(void *virt, size_t size, bool dump);
  *
  * @param run_dir
  *   The new runtime directory path of DPDK
- * @param size
- *   The size of the new runtime directory path in bytes.
  * @return
  *   0 on success, (-1) on failure.
  */
 int
-eal_set_runtime_dir(char *run_dir, size_t size);
+eal_set_runtime_dir(const char *run_dir);
 
 /**
  * Get the internal configuration structure.
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index a1cd2462db1b..503e276dc27f 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -123,7 +123,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 60b49248388e..f2551c64b10c 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -137,7 +137,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 2/2] eal: support systemd service convention for runtime directory
  2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2022-02-05 17:11     ` [PATCH v2 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
@ 2022-02-05 17:11     ` Stephen Hemminger
  2022-02-08  4:43     ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-05 17:11 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Bruce Richardson, Morten Brørup

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         | 23 +++++++++++++----------
 usertools/dpdk-telemetry.py | 10 +++++++---
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index f2551c64b10c..8a5723f3b3a7 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -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 Hierachy 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)) {
diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py
index 5b3bf83356c3..a81868a54789 100755
--- a/usertools/dpdk-telemetry.py
+++ b/usertools/dpdk-telemetry.py
@@ -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():
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 0/2] eal: support configuring runtime directory
  2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
  2022-02-05 17:11     ` [PATCH v2 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
  2022-02-05 17:11     ` [PATCH v2 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
@ 2022-02-08  4:43     ` Stephen Hemminger
  2022-02-08 10:48       ` Bruce Richardson
  2 siblings, 1 reply; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-08  4:43 UTC (permalink / raw)
  To: Bruce Richardson; +Cc: dev

On Sat,  5 Feb 2022 09:10:59 -0800
Stephen Hemminger <stephen@networkplumber.org> wrote:

> Found this while exploring running a DPDK service with systemd
> container environment. It helps if the place DPDK puts its runtime
> directory is configurable.
> 
> v2 - fix dpdk_telemetry.py to use append dpdk
> 
> Stephen Hemminger (2):
>   eal: remove size for eal_set_runtime_dir
>   eal: support systemd service convention for runtime directory
> 
>  lib/eal/common/eal_common_config.c |  7 ++-----
>  lib/eal/common/eal_private.h       |  4 +---
>  lib/eal/freebsd/eal.c              |  2 +-
>  lib/eal/linux/eal.c                | 25 ++++++++++++++-----------
>  usertools/dpdk-telemetry.py        | 10 +++++++---
>  5 files changed, 25 insertions(+), 23 deletions(-)
> 

Bruce is it worth moving this (and the sysfs logic) from
Linux only into unix/ directory and have common code with FreeBSD?


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 0/2] eal: support configuring runtime directory
  2022-02-08  4:43     ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
@ 2022-02-08 10:48       ` Bruce Richardson
  0 siblings, 0 replies; 22+ messages in thread
From: Bruce Richardson @ 2022-02-08 10:48 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

On Mon, Feb 07, 2022 at 08:43:48PM -0800, Stephen Hemminger wrote:
> On Sat,  5 Feb 2022 09:10:59 -0800
> Stephen Hemminger <stephen@networkplumber.org> wrote:
> 
> > Found this while exploring running a DPDK service with systemd
> > container environment. It helps if the place DPDK puts its runtime
> > directory is configurable.
> > 
> > v2 - fix dpdk_telemetry.py to use append dpdk
> > 
> > Stephen Hemminger (2):
> >   eal: remove size for eal_set_runtime_dir
> >   eal: support systemd service convention for runtime directory
> > 
> >  lib/eal/common/eal_common_config.c |  7 ++-----
> >  lib/eal/common/eal_private.h       |  4 +---
> >  lib/eal/freebsd/eal.c              |  2 +-
> >  lib/eal/linux/eal.c                | 25 ++++++++++++++-----------
> >  usertools/dpdk-telemetry.py        | 10 +++++++---
> >  5 files changed, 25 insertions(+), 23 deletions(-)
> > 
> 
> Bruce is it worth moving this (and the sysfs logic) from
> Linux only into unix/ directory and have common code with FreeBSD?
> 
The "create_runtime_dir()" function is indeed a copy-paste between the two
OS's so looks like it should be moved into a common unix implementation.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v3 0/3] eal: support configuring runtime directory
  2021-12-23 23:39 [RFC] eal: support systemd service convention for runtime directory Stephen Hemminger
                   ` (2 preceding siblings ...)
  2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
@ 2022-02-09  6:54 ` Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 1/3] eal: remove size for eal_set_runtime_dir Stephen Hemminger
                     ` (3 more replies)
  3 siblings, 4 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-09  6:54 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Systemd defines a standard way for setting the runtime directory
for services by setting RUNTIME_DIRECTORY in the environment,
and this is a useful way to interact with DPDK internals.
DPDK was already following the relevant standards
but there can be time when running as a non-root user that
the defaults don't work well.

v3 - move to common code between Linux and FreeBSD
     there is lots more code that could be combined here in future.

v2 - fix dpdk_telemetry.py to use append dpdk

Stephen Hemminger (3):
  eal: remove size for eal_set_runtime_dir
  eal: support systemd service convention for runtime directory
  eal: move common filesystem setup code into one file

 lib/eal/common/eal_common_config.c |   7 +-
 lib/eal/common/eal_private.h       |   4 +-
 lib/eal/freebsd/eal.c              |  88 -----------------------
 lib/eal/linux/eal.c                |  87 -----------------------
 lib/eal/unix/eal_filesystem.c      | 110 +++++++++++++++++++++++++++++
 lib/eal/unix/meson.build           |   1 +
 usertools/dpdk-telemetry.py        |  10 ++-
 7 files changed, 121 insertions(+), 186 deletions(-)
 create mode 100644 lib/eal/unix/eal_filesystem.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v3 1/3] eal: remove size for eal_set_runtime_dir
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
@ 2022-02-09  6:54   ` Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 2/3] eal: support systemd service convention for runtime directory Stephen Hemminger
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-09  6:54 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Morten Brørup

The size argument to eal_set_runtime_dir is useless and was
being used incorrectly in strlcpy. It worked only because
all callers passed PATH_MAX which is same as sizeof the destination
runtime_dir.

Note: this is an internal API so no user exposed change.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Morten Brørup<mb@smartsharesystems.com>
---
 lib/eal/common/eal_common_config.c | 7 ++-----
 lib/eal/common/eal_private.h       | 4 +---
 lib/eal/freebsd/eal.c              | 2 +-
 lib/eal/linux/eal.c                | 2 +-
 4 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index 6d19aadb2057..3cef43a4f706 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -29,12 +29,9 @@ rte_eal_get_runtime_dir(void)
 }
 
 int
-eal_set_runtime_dir(char *run_dir, size_t size)
+eal_set_runtime_dir(const char *run_dir)
 {
-	size_t str_size;
-
-	str_size = strlcpy(runtime_dir, run_dir, size);
-	if (str_size >= size) {
+	if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
 		RTE_LOG(ERR, EAL, "Runtime directory string too long\n");
 		return -1;
 	}
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index 36bcc0b5a492..734f1f334b69 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -681,13 +681,11 @@ eal_mem_set_dump(void *virt, size_t size, bool dump);
  *
  * @param run_dir
  *   The new runtime directory path of DPDK
- * @param size
- *   The size of the new runtime directory path in bytes.
  * @return
  *   0 on success, (-1) on failure.
  */
 int
-eal_set_runtime_dir(char *run_dir, size_t size);
+eal_set_runtime_dir(const char *run_dir);
 
 /**
  * Get the internal configuration structure.
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index a1cd2462db1b..503e276dc27f 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -123,7 +123,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 9c8395ab14d0..e37372ac7305 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -137,7 +137,7 @@ eal_create_runtime_dir(void)
 		return -1;
 	}
 
-	if (eal_set_runtime_dir(run_dir, sizeof(run_dir)))
+	if (eal_set_runtime_dir(run_dir))
 		return -1;
 
 	return 0;
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v3 2/3] eal: support systemd service convention for runtime directory
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 1/3] eal: remove size for eal_set_runtime_dir Stephen Hemminger
@ 2022-02-09  6:54   ` Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 3/3] eal: move common filesystem setup code into one file Stephen Hemminger
  2022-02-09 18:14   ` [PATCH v3 0/3] eal: support configuring runtime directory Thomas Monjalon
  3 siblings, 0 replies; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-09  6:54 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Bruce Richardson, Morten Brørup

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         | 23 +++++++++++++----------
 usertools/dpdk-telemetry.py | 10 +++++++---
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index e37372ac7305..e9764f6c9f37 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -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)) {
diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py
index 5b3bf83356c3..a81868a54789 100755
--- a/usertools/dpdk-telemetry.py
+++ b/usertools/dpdk-telemetry.py
@@ -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():
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v3 3/3] eal: move common filesystem setup code into one file
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 1/3] eal: remove size for eal_set_runtime_dir Stephen Hemminger
  2022-02-09  6:54   ` [PATCH v3 2/3] eal: support systemd service convention for runtime directory Stephen Hemminger
@ 2022-02-09  6:54   ` Stephen Hemminger
  2022-02-09  9:18     ` Bruce Richardson
  2022-02-09 18:14   ` [PATCH v3 0/3] eal: support configuring runtime directory Thomas Monjalon
  3 siblings, 1 reply; 22+ messages in thread
From: Stephen Hemminger @ 2022-02-09  6:54 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Both Linux and FreeBSD have same code for creating runtime
directory and reading sysfs files. Put them in the new lib/eal/unix
subdirectory.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/eal/freebsd/eal.c         |  88 ---------------------------
 lib/eal/linux/eal.c           |  90 ----------------------------
 lib/eal/unix/eal_filesystem.c | 110 ++++++++++++++++++++++++++++++++++
 lib/eal/unix/meson.build      |   1 +
 4 files changed, 111 insertions(+), 178 deletions(-)
 create mode 100644 lib/eal/unix/eal_filesystem.c

diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index 503e276dc27f..eacd432ab621 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -72,62 +72,6 @@ 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";
-	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;
-		else
-			directory = fallback;
-	}
-	/* create DPDK subdirectory under runtime dir */
-	ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory);
-	if (ret < 0 || ret == sizeof(tmp)) {
-		RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n");
-		return -1;
-	}
-
-	/* create prefix-specific subdirectory under DPDK runtime dir */
-	ret = snprintf(run_dir, sizeof(run_dir), "%s/%s",
-			tmp, eal_get_hugefile_prefix());
-	if (ret < 0 || ret == sizeof(run_dir)) {
-		RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n");
-		return -1;
-	}
-
-	/* create the path if it doesn't exist. no "mkdir -p" here, so do it
-	 * step by step.
-	 */
-	ret = mkdir(tmp, 0700);
-	if (ret < 0 && errno != EEXIST) {
-		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
-			tmp, strerror(errno));
-		return -1;
-	}
-
-	ret = mkdir(run_dir, 0700);
-	if (ret < 0 && errno != EEXIST) {
-		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
-			run_dir, strerror(errno));
-		return -1;
-	}
-
-	if (eal_set_runtime_dir(run_dir))
-		return -1;
-
-	return 0;
-}
 
 int
 eal_clean_runtime_dir(void)
@@ -138,38 +82,6 @@ eal_clean_runtime_dir(void)
 	return 0;
 }
 
-/* parse a sysfs (or other) file containing one integer value */
-int
-eal_parse_sysfs_value(const char *filename, unsigned long *val)
-{
-	FILE *f;
-	char buf[BUFSIZ];
-	char *end = NULL;
-
-	if ((f = fopen(filename, "r")) == NULL) {
-		RTE_LOG(ERR, EAL, "%s(): cannot open sysfs value %s\n",
-			__func__, filename);
-		return -1;
-	}
-
-	if (fgets(buf, sizeof(buf), f) == NULL) {
-		RTE_LOG(ERR, EAL, "%s(): cannot read sysfs value %s\n",
-			__func__, filename);
-		fclose(f);
-		return -1;
-	}
-	*val = strtoul(buf, &end, 0);
-	if ((buf[0] == '\0') || (end == NULL) || (*end != '\n')) {
-		RTE_LOG(ERR, EAL, "%s(): cannot parse sysfs value %s\n",
-				__func__, filename);
-		fclose(f);
-		return -1;
-	}
-	fclose(f);
-	return 0;
-}
-
-
 /* create memory configuration in shared/mmap memory. Take out
  * a write lock on the memsegs, so we can auto-detect primary/secondary.
  * This means we never close the file while running (auto-close on exit).
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index e9764f6c9f37..b99cab25ce48 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -86,65 +86,6 @@ struct lcore_config lcore_config[RTE_MAX_LCORE];
 /* used by rte_rdtsc() */
 int rte_cycles_vmware_tsc_map;
 
-int
-eal_create_runtime_dir(void)
-{
-	const char *directory;
-	char run_dir[PATH_MAX];
-	char tmp[PATH_MAX];
-	int ret;
-
-	/* 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 = 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)) {
-		RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n");
-		return -1;
-	}
-
-	/* create prefix-specific subdirectory under DPDK runtime dir */
-	ret = snprintf(run_dir, sizeof(run_dir), "%s/%s",
-			tmp, eal_get_hugefile_prefix());
-	if (ret < 0 || ret == sizeof(run_dir)) {
-		RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n");
-		return -1;
-	}
-
-	/* create the path if it doesn't exist. no "mkdir -p" here, so do it
-	 * step by step.
-	 */
-	ret = mkdir(tmp, 0700);
-	if (ret < 0 && errno != EEXIST) {
-		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
-			tmp, strerror(errno));
-		return -1;
-	}
-
-	ret = mkdir(run_dir, 0700);
-	if (ret < 0 && errno != EEXIST) {
-		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
-			run_dir, strerror(errno));
-		return -1;
-	}
-
-	if (eal_set_runtime_dir(run_dir))
-		return -1;
-
-	return 0;
-}
 
 int
 eal_clean_runtime_dir(void)
@@ -232,37 +173,6 @@ eal_clean_runtime_dir(void)
 	return -1;
 }
 
-/* parse a sysfs (or other) file containing one integer value */
-int
-eal_parse_sysfs_value(const char *filename, unsigned long *val)
-{
-	FILE *f;
-	char buf[BUFSIZ];
-	char *end = NULL;
-
-	if ((f = fopen(filename, "r")) == NULL) {
-		RTE_LOG(ERR, EAL, "%s(): cannot open sysfs value %s\n",
-			__func__, filename);
-		return -1;
-	}
-
-	if (fgets(buf, sizeof(buf), f) == NULL) {
-		RTE_LOG(ERR, EAL, "%s(): cannot read sysfs value %s\n",
-			__func__, filename);
-		fclose(f);
-		return -1;
-	}
-	*val = strtoul(buf, &end, 0);
-	if ((buf[0] == '\0') || (end == NULL) || (*end != '\n')) {
-		RTE_LOG(ERR, EAL, "%s(): cannot parse sysfs value %s\n",
-				__func__, filename);
-		fclose(f);
-		return -1;
-	}
-	fclose(f);
-	return 0;
-}
-
 
 /* create memory configuration in shared/mmap memory. Take out
  * a write lock on the memsegs, so we can auto-detect primary/secondary.
diff --git a/lib/eal/unix/eal_filesystem.c b/lib/eal/unix/eal_filesystem.c
new file mode 100644
index 000000000000..4759651a9581
--- /dev/null
+++ b/lib/eal/unix/eal_filesystem.c
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2018 Intel Corporation.
+ * Copyright(c) 2012-2014 6WIND S.A.
+ */
+
+#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <rte_common.h>
+#include <rte_log.h>
+
+#include "eal_private.h"
+#include "eal_filesystem.h"
+
+int
+eal_create_runtime_dir(void)
+{
+	const char *directory;
+	char run_dir[PATH_MAX];
+	char tmp[PATH_MAX];
+	int ret;
+
+	/* 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 = 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)) {
+		RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n");
+		return -1;
+	}
+
+	/* create prefix-specific subdirectory under DPDK runtime dir */
+	ret = snprintf(run_dir, sizeof(run_dir), "%s/%s",
+			tmp, eal_get_hugefile_prefix());
+	if (ret < 0 || ret == sizeof(run_dir)) {
+		RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n");
+		return -1;
+	}
+
+	/* create the path if it doesn't exist. no "mkdir -p" here, so do it
+	 * step by step.
+	 */
+	ret = mkdir(tmp, 0700);
+	if (ret < 0 && errno != EEXIST) {
+		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
+			tmp, strerror(errno));
+		return -1;
+	}
+
+	ret = mkdir(run_dir, 0700);
+	if (ret < 0 && errno != EEXIST) {
+		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
+			run_dir, strerror(errno));
+		return -1;
+	}
+
+	if (eal_set_runtime_dir(run_dir))
+		return -1;
+
+	return 0;
+}
+/* parse a sysfs (or other) file containing one integer value */
+int
+eal_parse_sysfs_value(const char *filename, unsigned long *val)
+{
+	FILE *f;
+	char buf[BUFSIZ];
+	char *end = NULL;
+
+	if ((f = fopen(filename, "r")) == NULL) {
+		RTE_LOG(ERR, EAL, "%s(): cannot open sysfs value %s\n",
+			__func__, filename);
+		return -1;
+	}
+
+	if (fgets(buf, sizeof(buf), f) == NULL) {
+		RTE_LOG(ERR, EAL, "%s(): cannot read sysfs value %s\n",
+			__func__, filename);
+		fclose(f);
+		return -1;
+	}
+	*val = strtoul(buf, &end, 0);
+	if ((buf[0] == '\0') || (end == NULL) || (*end != '\n')) {
+		RTE_LOG(ERR, EAL, "%s(): cannot parse sysfs value %s\n",
+				__func__, filename);
+		fclose(f);
+		return -1;
+	}
+	fclose(f);
+	return 0;
+}
diff --git a/lib/eal/unix/meson.build b/lib/eal/unix/meson.build
index e3ecd3e956b2..a22ea7cabc46 100644
--- a/lib/eal/unix/meson.build
+++ b/lib/eal/unix/meson.build
@@ -6,5 +6,6 @@ sources += files(
         'eal_unix_memory.c',
         'eal_unix_timer.c',
         'eal_firmware.c',
+        'eal_filesystem.c',
         'rte_thread.c',
 )
-- 
2.34.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v3 3/3] eal: move common filesystem setup code into one file
  2022-02-09  6:54   ` [PATCH v3 3/3] eal: move common filesystem setup code into one file Stephen Hemminger
@ 2022-02-09  9:18     ` Bruce Richardson
  0 siblings, 0 replies; 22+ messages in thread
From: Bruce Richardson @ 2022-02-09  9:18 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

On Tue, Feb 08, 2022 at 10:54:03PM -0800, Stephen Hemminger wrote:
> Both Linux and FreeBSD have same code for creating runtime
> directory and reading sysfs files. Put them in the new lib/eal/unix
> subdirectory.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
LGTM, apart from one minor nit inline below.

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

> ---
>  lib/eal/freebsd/eal.c         |  88 ---------------------------
>  lib/eal/linux/eal.c           |  90 ----------------------------
>  lib/eal/unix/eal_filesystem.c | 110 ++++++++++++++++++++++++++++++++++
>  lib/eal/unix/meson.build      |   1 +
>  4 files changed, 111 insertions(+), 178 deletions(-)
>  create mode 100644 lib/eal/unix/eal_filesystem.c
> 
<snip>
> +
> +	/* create the path if it doesn't exist. no "mkdir -p" here, so do it
> +	 * step by step.
> +	 */
> +	ret = mkdir(tmp, 0700);
> +	if (ret < 0 && errno != EEXIST) {
> +		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
> +			tmp, strerror(errno));
> +		return -1;
> +	}
> +
> +	ret = mkdir(run_dir, 0700);
> +	if (ret < 0 && errno != EEXIST) {
> +		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
> +			run_dir, strerror(errno));
> +		return -1;
> +	}
> +
> +	if (eal_set_runtime_dir(run_dir))
> +		return -1;
> +
> +	return 0;
> +}

Missing a blank line here between the two functions.

> +/* parse a sysfs (or other) file containing one integer value */
> +int
> +eal_parse_sysfs_value(const char *filename, unsigned long *val)
> +{
> +	FILE *f;
> +	char buf[BUFSIZ];
> +	char *end = NULL;
> +
> +	if ((f = fopen(filename, "r")) == NULL) {
> +		RTE_LOG(ERR, EAL, "%s(): cannot open sysfs value %s\n",
> +			__func__, filename);
> +		return -1;
> +	}
> +
> +	if (fgets(buf, sizeof(buf), f) == NULL) {
> +		RTE_LOG(ERR, EAL, "%s(): cannot read sysfs value %s\n",
> +			__func__, filename);
> +		fclose(f);
> +		return -1;
> +	}
> +	*val = strtoul(buf, &end, 0);
> +	if ((buf[0] == '\0') || (end == NULL) || (*end != '\n')) {
> +		RTE_LOG(ERR, EAL, "%s(): cannot parse sysfs value %s\n",
> +				__func__, filename);
> +		fclose(f);
> +		return -1;
> +	}
> +	fclose(f);
> +	return 0;
> +}
> diff --git a/lib/eal/unix/meson.build b/lib/eal/unix/meson.build
> index e3ecd3e956b2..a22ea7cabc46 100644
> --- a/lib/eal/unix/meson.build
> +++ b/lib/eal/unix/meson.build
> @@ -6,5 +6,6 @@ sources += files(
>          'eal_unix_memory.c',
>          'eal_unix_timer.c',
>          'eal_firmware.c',
> +        'eal_filesystem.c',
>          'rte_thread.c',
>  )
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v3 0/3] eal: support configuring runtime directory
  2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
                     ` (2 preceding siblings ...)
  2022-02-09  6:54   ` [PATCH v3 3/3] eal: move common filesystem setup code into one file Stephen Hemminger
@ 2022-02-09 18:14   ` Thomas Monjalon
  3 siblings, 0 replies; 22+ messages in thread
From: Thomas Monjalon @ 2022-02-09 18:14 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, bruce.richardson

09/02/2022 07:54, Stephen Hemminger:
> Systemd defines a standard way for setting the runtime directory
> for services by setting RUNTIME_DIRECTORY in the environment,
> and this is a useful way to interact with DPDK internals.
> DPDK was already following the relevant standards
> but there can be time when running as a non-root user that
> the defaults don't work well.

Applied with suggested minor fix, thanks.



^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2022-02-09 18:15 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-23 23:39 [RFC] eal: support systemd service convention for runtime directory Stephen Hemminger
2021-12-26 12:20 ` Morten Brørup
2022-01-05 18:01   ` [RFC] eal: remove size for eal_set_runtime_dir Stephen Hemminger
2022-01-05 20:04     ` Morten Brørup
2022-01-07 12:07 ` [RFC] eal: support systemd service convention for runtime directory Bruce Richardson
2022-02-02 21:03   ` Thomas Monjalon
2022-02-02 21:07     ` Stephen Hemminger
2022-02-03  6:00 ` [PATCH 0/2] better support of configuring " Stephen Hemminger
2022-02-03  6:00   ` [PATCH 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
2022-02-03  6:00   ` [PATCH 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
2022-02-03 11:37     ` Bruce Richardson
2022-02-05 17:10   ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
2022-02-05 17:11     ` [PATCH v2 1/2] eal: remove size for eal_set_runtime_dir Stephen Hemminger
2022-02-05 17:11     ` [PATCH v2 2/2] eal: support systemd service convention for runtime directory Stephen Hemminger
2022-02-08  4:43     ` [PATCH v2 0/2] eal: support configuring " Stephen Hemminger
2022-02-08 10:48       ` Bruce Richardson
2022-02-09  6:54 ` [PATCH v3 0/3] " Stephen Hemminger
2022-02-09  6:54   ` [PATCH v3 1/3] eal: remove size for eal_set_runtime_dir Stephen Hemminger
2022-02-09  6:54   ` [PATCH v3 2/3] eal: support systemd service convention for runtime directory Stephen Hemminger
2022-02-09  6:54   ` [PATCH v3 3/3] eal: move common filesystem setup code into one file Stephen Hemminger
2022-02-09  9:18     ` Bruce Richardson
2022-02-09 18:14   ` [PATCH v3 0/3] eal: support configuring runtime directory Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).