From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [nft RFC PATCH 0/6] events
Date: Tue, 18 Feb 2014 02:07:39 +0100 [thread overview]
Message-ID: <20140218010739.GA3941@localhost> (raw)
In-Reply-To: <20140217231654.19943.18736.stgit@nfdev.cica.es>
Hi Arturo,
On Tue, Feb 18, 2014 at 12:18:06AM +0100, Arturo Borrero Gonzalez wrote:
> This series implements basic event reporting in the nftables CLI tool.
>
> The first patches are some neccesary code factorization changes.
> The last patch is the event reporting itself.
>
> Its quite simple, the syntax is:
> % nft event <all|table|chain|rule|set> [xml|json]
It would be good to allow matching based on the event type, ie. new /
delete.
> To quit, fire CTRL+C (^C).
>
> Currently, 3 possible output formats:
> * A basic XML, provided by libnftnl.
> * A basic JSON, provided by libnftnl.
> * nft default-like syntax.
>
> About this last format:
>
> Rules are hard to print exactly as the user typed because sets and other
> nuances. Possible solutions I've found:
> - assume that an anonymous set event will happen always before a new rule event.
> Cache the anon-set for the following rule event.
Yes, you will to listen to set events and initially create a cache
with the events that you already have.
> Maybe there are many anon-sets per rule.
> - when a rule event happens, query for sets inside the event cb.
This seems expensive to me as you will need send request to the kernel
per rule that points to a set.
> - for this to run smoothly, we need to keep tables info in sync with the
> kernel, so in each relevant event, the netlink_ctx is needed to be updated and
> this allows to reuse netlink_delinearize_rule().
>
> But I think this first approach is valid.
>
> So, the format with this series is as follow:
>
> % nft event all
> delete table ip6 filter
> add table ip6 filter
> add chain ip6 filter input { type filter hook input priority 0;}
> add chain ip6 filter forward { type filter hook forward priority 0;}
> add chain ip6 filter output { type filter hook output priority 0;}
> add rule ip6 filter input handle 4
I guess this is why you point to netlink_delinearize_rule above.
> delete rule ip6 filter input handle 4
> add set ip6 filter set1 {type ipv6_address}
> delete chain ip6 filter input
> delete set ip6 filter set1
>
> NOTE: no way to add comments in JSON, so I decided to add that bash-like
> comment by now and be consistent in both formats.
I think you can wrap that information with the event type? ie.
<event type="new">...</event>
Please, check if you can add a similar wrapper to json.
> % nft event all xml
> <table><name>test</name><family>arp</family><flags>0</flags><use>0</use></table> # add table
> <chain><name>c</name><handle>1</handle><bytes>0</bytes><packets>0</packets><table>test</table><family>arp</family></chain> # add chain
> <chain><name>c</name><handle>1</handle><bytes>0</bytes><packets>0</packets><table>test</table><family>arp</family></chain> # del chain
> <table><name>test</name><family>arp</family><flags>0</flags><use>0</use></table> # del table
>
> % nft event all json
> {"table":{"name":"test","family":"arp","flags":0,"use":0}} # add table
> {"set":{"name":"set123","table":"test","flags":0,"family":"arp","key_type":7,"key_len":4}} # add set
>
> Please comment.
>
> ---
>
> Arturo Borrero Gonzalez (6):
> rule: make family2str() public
> rule: allow to print sets in plain format
> netlink: add netlink_delinearize_set() func
> rule: generalize chain_print()
> netlink: add netlink_delinearize_rule() func
> src: add events reporting
>
>
> include/mnl.h | 3 +
> include/netlink.h | 15 +++
> include/rule.h | 7 +
> src/evaluate.c | 1
> src/mnl.c | 45 +++++---
> src/netlink.c | 268 ++++++++++++++++++++++++++++++++++++++-------
> src/netlink_delinearize.c | 57 ++++++++++
> src/parser.y | 60 ++++++++++
> src/rule.c | 93 +++++++++++++---
> src/scanner.l | 2
> 10 files changed, 477 insertions(+), 74 deletions(-)
>
> --
> Arturo Borrero Gonzalez
next prev parent reply other threads:[~2014-02-18 1:07 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-17 23:18 [nft RFC PATCH 0/6] events Arturo Borrero Gonzalez
2014-02-17 23:18 ` [nft RFC PATCH 1/6] rule: make family2str() public Arturo Borrero Gonzalez
2014-02-18 1:01 ` Pablo Neira Ayuso
2014-02-17 23:18 ` [nft RFC PATCH 2/6] rule: allow to print sets in plain format Arturo Borrero Gonzalez
2014-02-18 1:54 ` Patrick McHardy
2014-02-17 23:18 ` [nft RFC PATCH 3/6] netlink: add netlink_delinearize_set() func Arturo Borrero Gonzalez
2014-02-18 1:56 ` Patrick McHardy
2014-02-18 9:11 ` Arturo Borrero Gonzalez
2014-02-18 9:21 ` Patrick McHardy
2014-02-17 23:18 ` [nft RFC PATCH 4/6] rule: generalize chain_print() Arturo Borrero Gonzalez
2014-02-17 23:18 ` [nft RFC PATCH 5/6] netlink: add netlink_delinearize_rule() func Arturo Borrero Gonzalez
2014-02-17 23:18 ` [nft RFC PATCH 6/6] src: add events reporting Arturo Borrero Gonzalez
2014-02-18 1:10 ` Pablo Neira Ayuso
2014-02-18 2:03 ` Patrick McHardy
2014-02-18 9:28 ` Pablo Neira Ayuso
2014-02-18 9:33 ` Patrick McHardy
2014-02-18 9:43 ` Pablo Neira Ayuso
2014-02-18 9:52 ` Patrick McHardy
2014-02-18 9:58 ` Pablo Neira Ayuso
2014-02-18 10:12 ` Patrick McHardy
2014-02-18 14:21 ` Arturo Borrero Gonzalez
2014-02-18 14:46 ` Patrick McHardy
2014-02-18 1:07 ` Pablo Neira Ayuso [this message]
2014-02-18 1:43 ` [nft RFC PATCH 0/6] events Patrick McHardy
2014-02-18 9:20 ` Arturo Borrero Gonzalez
2014-02-18 9:24 ` Patrick McHardy
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=20140218010739.GA3941@localhost \
--to=pablo@netfilter.org \
--cc=arturo.borrero.glez@gmail.com \
--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 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).