On Mon, Oct 29, 2018 at 01:29:32PM +0100, Phil Sutter wrote:
> Hi,
> 
> On Mon, Oct 29, 2018 at 12:33:39PM +0100, Pablo Neira Ayuso wrote:
> > Add NFT_CTX_OUTPUT_JSON flag and display output in json format.
> > 
> > Signed-off-by: Pablo Neira Ayuso <pa...@netfilter.org>
> [...]
> > diff --git a/doc/libnftables.adoc b/doc/libnftables.adoc
> > index 8b7aee9af134..5a3562c3266c 100644
> > --- a/doc/libnftables.adoc
> > +++ b/doc/libnftables.adoc
> [...]
> > @@ -105,6 +103,8 @@ NFT_CTX_OUTPUT_STATELESS::
> >     If stateless output has been requested then stateful data is not 
> > printed. Stateful data refers to those objects that carry run-time data, 
> > eg. the *counter* statement holds packet and byte counter values, making it 
> > stateful.
> >  NFT_CTX_OUTPUT_HANDLE::
> >     Upon insertion into the ruleset, some elements are assigned a unique 
> > handle for identification purposes. For example, when deleting a table or 
> > chain, it may be identified either by name or handle. Rules on the other 
> > hand must be deleted by handle because there is no other way to uniquely 
> > identify them. These functions allow to control whether ruleset listings 
> > should include handles or not.
> > +NFT_CTX_OUTPUT_JSON::
> > +   If enabled at compile-time, libnftables accepts input in JSON format 
> > and is able to print output in JSON format as well. See 
> > *libnftables-json*(5) for a description of the supported schema. These 
> > functions control JSON output format, input is auto-detected.
> 
> s/These functions control/This flag controls/

Done. Thanks!

> [...]
> > diff --git a/src/libnftables.c b/src/libnftables.c
> > index 6dc1be3d5ef8..ff7a53d22ba4 100644
> > --- a/src/libnftables.c
> > +++ b/src/libnftables.c
> > @@ -352,22 +352,6 @@ void nft_ctx_output_set_echo(struct nft_ctx *ctx, bool 
> > val)
> >     ctx->output.echo = val;
> >  }
> >  
> > -bool nft_ctx_output_get_json(struct nft_ctx *ctx)
> > -{
> > -#ifdef HAVE_LIBJANSSON
> > -   return ctx->output.json;
> > -#else
> > -   return false;
> > -#endif
> > -}
> > -
> > -void nft_ctx_output_set_json(struct nft_ctx *ctx, bool val)
> > -{
> > -#ifdef HAVE_LIBJANSSON
> > -   ctx->output.json = val;
> > -#endif
> > -}
> > -
> 
> In above functions, I guarded output.json setting by whether JSON
> support was built-in.

I'm going to do the same here but...

> [...]
> > diff --git a/src/main.c b/src/main.c
> > index 97b8746608a7..8ea07641734d 100644
> > --- a/src/main.c
> > +++ b/src/main.c
> > @@ -271,7 +271,7 @@ int main(int argc, char * const *argv)
> >                     nft_ctx_output_set_echo(nft, true);
> >                     break;
> >             case OPT_JSON:
> > -                   nft_ctx_output_set_json(nft, true);
> > +                   output_flags |= NFT_CTX_OUTPUT_JSON;
> >                     break;
> >             case OPT_INVALID:
> >                     exit(EXIT_FAILURE);
> 
> Maybe we should do the same here? Otherwise if JSON wasn't enabled at
> compile-time, calling 'nft -j' leads to no output at all. (Not sure if
> silently falling back to standard output formatting is a better choice
> after all. :)

... I think failing here is json support is not built-in is the way to
go - instead of silently ignoring it.

Would you mind send a follow up patch to change this behaviour? :-)

Thanks!

Reply via email to