netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick McHardy <kaber@trash.net>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: nft cache updates
Date: Mon, 9 Nov 2015 17:05:11 +0000	[thread overview]
Message-ID: <20151109170510.GA9715@macbook.localdomain> (raw)
In-Reply-To: <20151109164847.GA1723@salvia>

On 09.11, Pablo Neira Ayuso wrote:
> On Mon, Nov 09, 2015 at 03:30:56PM +0000, Patrick McHardy wrote:
> > Hi Pablo,
> > 
> > I'm wondering what the rational for the current cache update behaviour is.
> > The changelog states it is somehow related to the requested command, but
> > that doesn't seem to be true.
> > 
> > Even "nft describe" fails with EPERM as user since the cache appears to be
> > initialized unconditionally, which is a bit unfortunate. Also I used to
> > test things parsing, evaluation and even netlink generation without actually
> > adding those rules as user, which does not work anymore.  This might
> > be harder to get working again, but I'm not sure why we do a full
> > initialization anyways.  The only thing that appears to be needed
> > are sets, and those only in some specific circumstances.
> 
> To look up for the existing sets we need the existing tables and
> chains, they are essential part of the object hierarchy. So this is
> what we're currently dumping.

Well, its not really necessary to have all elements present, the set handle
is enough to recreate the hierarchy. Unless we need properties of the table
or chains themselves its quite useless.

> In general, we need this for incremental updates, in scenarios where
> we have objects that are defined in kernelspace but userspace refers
> to them.
> 
> As you said we can disable the cache in many cases, depending on the
> command or if the ruleset file starts by:
> 
> flush ruleset
> 
> but I have left this out as follow up work, I just wanted to make sure
> incremental updates where working, as well as the existing changes.

I understand. But with dumping the full hierarchy it seems reasonable to
do the update in the place where we are doing it right now. But we actually
only need a very small subset of that, and if we wouldn't dump all of that
information it would actually make sense to move it to the spots that refer
to (existing) sets only.

> nft describe should be easy to restore.
> 
> Regarding inconditional check for table and chain, we have to make it
> from the evaluation step in sets, so leaving other objects without
> checking this seems inconsistent to me.

But we don't actually need any of that information, do we?

> Another side effect of this is better error reporting to the user.

I can see that it is useful, but causing an error for reporting an error
doesn't seem like the correct way to do it. I'm also generally uncertain
about checking this *beforehand*, our usual approach is that solely the
kernel is responsible for determining object existance etc. We could
also interpret context to get the same error reporting.

Last point would be overhead of dumping all that information we don't
*really* need.

Even if we say this is acceptable (I think correctly putting netlink
errors in context is better since it allows to properly report many
other errors as well), I'd prefer if it wouldn't cause a hard failure
such as EPERM.

  reply	other threads:[~2015-11-09 17:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09 15:30 nft cache updates Patrick McHardy
2015-11-09 16:48 ` Pablo Neira Ayuso
2015-11-09 17:05   ` Patrick McHardy [this message]
2015-11-09 18:38     ` 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=20151109170510.GA9715@macbook.localdomain \
    --to=kaber@trash.net \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pablo@netfilter.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).