All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Eric Leblond <eric@regit.org>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [PATH nft v2 10/18] libnftables: add a nft_cache to nft_ctx
Date: Mon, 21 Aug 2017 10:32:27 +0200	[thread overview]
Message-ID: <20170821083227.GG2982@salvia> (raw)
In-Reply-To: <20170819152420.22563-11-eric@regit.org>

On Sat, Aug 19, 2017 at 05:24:12PM +0200, Eric Leblond wrote:
> Hide this structure from the user, this allows simplify the simple
> functions by just providing easy and meaningfull arguments.

I'm fine with placing the cache into nft_ctx. You can send an upfront
initial patch to do this that I would ack asap.

More comments below.

> Signed-off-by: Eric Leblond <eric@regit.org>
> ---
>  include/cli.h               |  2 +-
>  include/nftables.h          | 13 +++++++------
>  include/nftables/nftables.h |  5 ++---
>  src/cli.c                   | 10 ++++++++--
>  src/libnftables.c           | 19 +++++++++++--------
>  src/main.c                  | 11 +++--------
>  6 files changed, 32 insertions(+), 28 deletions(-)
> 
> diff --git a/include/cli.h b/include/cli.h
> index e577400..899c8a6 100644
> --- a/include/cli.h
> +++ b/include/cli.h
> @@ -6,7 +6,7 @@
>  struct parser_state;
>  #ifdef HAVE_LIBREADLINE
>  extern int cli_init(struct nft_ctx *nft, struct mnl_socket *nf_sock,
> -		    struct nft_cache *cache, struct parser_state *state);
> +		    struct parser_state *state);
>  #else
>  static inline int cli_init(struct nft_ctx *nft, struct mnl_socket *nf_sock,
>  			   struct nft_cache *cache, struct parser_state *state)

cli_init footprint is not updated, this will break compilation with no
HAVE_LIBREADLINE.

> diff --git a/include/nftables.h b/include/nftables.h
> index aad204e..348fbb0 100644
> --- a/include/nftables.h
> +++ b/include/nftables.h
> @@ -32,18 +32,19 @@ struct output_ctx {
>  	unsigned int echo;
>  };
>  
> -struct nft_ctx {
> -	struct output_ctx	output;
> -	bool			check;
> -	struct mnl_socket	*nf_sock;
> -};
> -
>  struct nft_cache {
>  	bool			initialized;
>  	struct list_head	list;
>  	uint32_t		seqnum;
>  };
>  
> +struct nft_ctx {
> +	struct output_ctx	output;
> +	bool			check;
> +	struct mnl_socket	*nf_sock;
> +	struct nft_cache	cache;
> +};
> +
>  extern unsigned int max_errors;
>  extern unsigned int debug_level;
>  extern const char *include_paths[INCLUDE_PATHS_MAX];
> diff --git a/include/nftables/nftables.h b/include/nftables/nftables.h
> index 20a062c..b902cbd 100644
> --- a/include/nftables/nftables.h
> +++ b/include/nftables/nftables.h
> @@ -27,9 +27,8 @@ void nft_global_deinit(void);
>  struct nft_ctx *nft_context_new(void);
>  void nft_context_free(struct nft_ctx *nft);
>  
> -int nft_run_command_from_buffer(struct nft_ctx *nft, struct nft_cache *cache,
> +int nft_run_command_from_buffer(struct nft_ctx *nft,
>  				char *buf, size_t buflen);
> -int nft_run_command_from_filename(struct nft_ctx *nft, struct nft_cache *cache,
> -				  const char *filename);
> +int nft_run_command_from_filename(struct nft_ctx *nft, const char *filename);
>  
>  #endif
> diff --git a/src/cli.c b/src/cli.c
> index 7501b29..fd5c7b7 100644
> --- a/src/cli.c
> +++ b/src/cli.c
> @@ -177,13 +177,17 @@ void __fmtstring(1, 0) cli_display(const char *fmt, va_list ap)
>  }
>  
>  int cli_init(struct nft_ctx *nft, struct mnl_socket *nf_sock,
> -	     struct nft_cache *cache, struct parser_state *_state)
> +	     struct parser_state *_state)
>  {
>  	const char *home;
> +	struct nft_cache cache;
> +
> +	memset(&cache, 0, sizeof(cache));
> +	init_list_head(&cache.list);
>  
>  	cli_nf_sock = nf_sock;
>  	cli_nft = *nft;
> -	cli_cache = cache;
> +	cli_cache = &cache;
>  	rl_readline_name = "nft";
>  	rl_instream  = stdin;
>  	rl_outstream = stdout;
> @@ -204,6 +208,8 @@ int cli_init(struct nft_ctx *nft, struct mnl_socket *nf_sock,
>  
>  	while (!eof)
>  		rl_callback_read_char();
> +
> +	cache_release(&cache);
>  	return 0;
>  }
>  
> diff --git a/src/libnftables.c b/src/libnftables.c
> index 28f9272..19d539c 100644
> --- a/src/libnftables.c
> +++ b/src/libnftables.c
> @@ -63,7 +63,10 @@ struct nft_ctx *nft_context_new(void)
>  	ctx = calloc(1, sizeof(struct nft_ctx));
>  	if (ctx == NULL)
>  		return NULL;
> +
> +	memset(ctx, 0, sizeof(*ctx));

memset() a calloc() memory area? Not needed.

>  	ctx->nf_sock = netlink_open_sock();
> +	init_list_head(&ctx->cache.list);

Cleanup: It would be good to add a cache_init() function probably.

>  	return ctx;
>  }
> @@ -74,6 +77,7 @@ void nft_context_free(struct nft_ctx *nft)
>  	if (nft == NULL)
>  		return;
>  	netlink_close_sock(nft->nf_sock);
> +	cache_release(&nft->cache);
>  	xfree(nft);
>  }
>  
> @@ -82,7 +86,7 @@ static const struct input_descriptor indesc_cmdline = {
>  	.name	= "<cmdline>",
>  };
>  
> -int nft_run_command_from_buffer(struct nft_ctx *nft, struct nft_cache *cache,
> +int nft_run_command_from_buffer(struct nft_ctx *nft,
>  				char *buf, size_t buflen)
>  {
>  	int rc = NFT_EXIT_SUCCESS;
> @@ -90,11 +94,11 @@ int nft_run_command_from_buffer(struct nft_ctx *nft, struct nft_cache *cache,
>  	LIST_HEAD(msgs);
>  	void *scanner;
>  
> -	parser_init(nft->nf_sock, cache, &state, &msgs);
> +	parser_init(nft->nf_sock, &nft->cache, &state, &msgs);
>  	scanner = scanner_init(&state);
>  	scanner_push_buffer(scanner, &indesc_cmdline, buf);
>  		
        ^^^^^^^^

Comestic: There is an empty line here above with an indent.

  reply	other threads:[~2017-08-21  8:32 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-19 15:24 [PATCH nft v2 00/18] introducing libnftables Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 01/18] mnl: fix error handling in mnl_batch_talk Eric Leblond
2017-08-21  8:10   ` Pablo Neira Ayuso
2017-08-21 19:01     ` Eric Leblond
2017-08-24 15:13       ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 02/18] erec: add function to free list Eric Leblond
2017-08-21  8:12   ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 03/18] libnftables: introduce library Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 04/18] libnftables: add context new and free Eric Leblond
2017-08-21  8:17   ` Pablo Neira Ayuso
2017-08-24 15:30   ` Pablo Neira Ayuso
2017-08-25 11:22     ` Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 05/18] libnftables: add nft_run_command_from_buffer Eric Leblond
2017-08-21  8:23   ` Pablo Neira Ayuso
2017-08-21  8:45     ` Pablo Neira Ayuso
2017-08-21  9:06       ` Eric Leblond
2017-08-21  9:44         ` Pablo Neira Ayuso
2017-08-21 19:21           ` Eric Leblond
2017-08-22 12:37             ` Pablo Neira Ayuso
2017-08-25 11:16               ` Eric Leblond
2017-08-24 15:49   ` Pablo Neira Ayuso
2017-08-25 11:26     ` Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 06/18] libnftables: add nft_run_command_from_filename Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 07/18] libnftables: put nft_run in library Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 08/18] libnftables: add missing variables to library Eric Leblond
2017-08-21  8:27   ` Pablo Neira Ayuso
2017-08-21 19:04     ` Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 09/18] libnftables: add NFT_EXIT_* " Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 10/18] libnftables: add a nft_cache to nft_ctx Eric Leblond
2017-08-21  8:32   ` Pablo Neira Ayuso [this message]
2017-08-19 15:24 ` [PATH nft v2 11/18] libnftables: move iface_cache_release to deinit Eric Leblond
2017-08-21  8:33   ` Pablo Neira Ayuso
2017-08-24 15:55   ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 12/18] libnftables: get rid of printf Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 13/18] libnftables: add nft_context_set_print Eric Leblond
2017-08-25  9:59   ` Pablo Neira Ayuso
2017-08-25 11:49     ` Eric Leblond
2017-08-30 10:46       ` Pablo Neira Ayuso
2017-08-31 10:09         ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 14/18] libnftables: transaction support Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 15/18] libnftables: set max_errors to 1 in library Eric Leblond
2017-08-21  8:37   ` Pablo Neira Ayuso
2017-08-21 19:12     ` Eric Leblond
2017-08-22 15:04       ` Phil Sutter
2017-08-24 16:02       ` Pablo Neira Ayuso
2017-08-25 11:37         ` Eric Leblond
2017-08-28 15:18           ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 16/18] libnftables: add error handling Eric Leblond
2017-08-19 15:24 ` [PATH nft v2 17/18] libnftables: suppress unused global variables Eric Leblond
2017-08-21  8:40   ` Pablo Neira Ayuso
2017-08-19 15:24 ` [PATH nft v2 18/18] libnftables: doxygen documentation Eric Leblond
2017-08-21  8:55 ` [PATCH nft v2 00/18] introducing libnftables Pablo Neira Ayuso
2017-08-21 21:42   ` Eric Leblond
2017-08-22 17:30     ` Pablo Neira Ayuso
2017-08-30 10:31 ` Phil Sutter
2017-08-31 10:19   ` Pablo Neira Ayuso

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170821083227.GG2982@salvia \
    --to=pablo@netfilter.org \
    --cc=eric@regit.org \
    --cc=netfilter-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.