[dpdk-dev] [PATCH v4 2/8] net/failsafe: add "fd" parameter

Gaëtan Rivet gaetan.rivet at 6wind.com
Thu Jan 18 09:51:48 CET 2018


Hi Matan,

You forgot to fix the fcntl call, see below,

On Thu, Jan 18, 2018 at 08:43:40AM +0000, Matan Azrad wrote:
> This parameter enables applications to provide device definitions through
> an arbitrary file descriptor number.
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
> Signed-off-by: Matan Azrad <matan at mellanox.com>

with the relevant fixes:
Acked-by: Gaetan Rivet <gaetan.rivet at 6wind.com>

> ---
>  doc/guides/nics/fail_safe.rst           |  9 ++++
>  drivers/net/failsafe/failsafe_args.c    | 80 ++++++++++++++++++++++++++++++++-
>  drivers/net/failsafe/failsafe_private.h |  3 ++
>  3 files changed, 91 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/guides/nics/fail_safe.rst b/doc/guides/nics/fail_safe.rst
> index c4e3d2e..5b1b47e 100644
> --- a/doc/guides/nics/fail_safe.rst
> +++ b/doc/guides/nics/fail_safe.rst
> @@ -106,6 +106,15 @@ Fail-safe command line parameters
>    All commas within the ``shell command`` are replaced by spaces before
>    executing the command. This helps using scripts to specify devices.
>  
> +- **fd(<file descriptor number>)** parameter
> +
> +  This parameter reads a device definition from an arbitrary file descriptor
> +  number in ``<iface>`` format as described above.
> +
> +  The file descriptor is read in non-blocking mode and is never closed in
> +  order to take only the last line into account (unlike ``exec()``) at every
> +  probe attempt.
> +
>  - **mac** parameter [MAC address]
>  
>    This parameter allows the user to set a default MAC address to the fail-safe
> diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c
> index ec63ac9..db5235b 100644
> --- a/drivers/net/failsafe/failsafe_args.c
> +++ b/drivers/net/failsafe/failsafe_args.c
> @@ -31,7 +31,11 @@
>   *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>   */
>  
> +#include <fcntl.h>
> +#include <stdio.h>
> +#include <stdlib.h>
>  #include <string.h>
> +#include <unistd.h>
>  #include <errno.h>
>  
>  #include <rte_debug.h>
> @@ -161,6 +165,67 @@ typedef int (parse_cb)(struct rte_eth_dev *dev, const char *params,
>  }
>  
>  static int
> +fs_read_fd(struct sub_device *sdev, char *fd_str)
> +{
> +	FILE *fp = NULL;
> +	int fd = -1;
> +	/* store possible newline as well */
> +	char output[DEVARGS_MAXLEN + 1];
> +	int err = -ENODEV;
> +	int oflags;
> +	int lcount;
> +
> +	RTE_ASSERT(fd_str != NULL || sdev->fd_str != NULL);
> +	if (sdev->fd_str == NULL) {
> +		sdev->fd_str = strdup(fd_str);
> +		if (sdev->fd_str == NULL) {
> +			ERROR("Command line allocation failed");
> +			return -ENOMEM;
> +		}
> +	}
> +	errno = 0;
> +	fd = strtol(fd_str, &fd_str, 0);
> +	if (errno || *fd_str || fd < 0) {
> +		ERROR("Parsing FD number failed");
> +		goto error;
> +	}
> +	/* Fiddle with copy of file descriptor */
> +	fd = dup(fd);
> +	if (fd == -1)
> +		goto error;
> +	oflags = fcntl(fd, F_GETFL);
> +	if (oflags == -1)
> +		goto error;
> +	if (fcntl(fd, F_SETFL, fd | O_NONBLOCK) == -1)

fcntl(fd, F_SETFL, oflags | O_NONBLOCK); here

> +		goto error;
> +	fp = fdopen(fd, "r");
> +	if (!fp)

While you're at it, here please use

    if (fp != NULL)

instead.

Regards,
-- 
Gaëtan Rivet
6WIND


More information about the dev mailing list