From: Pablo Neira Ayuso <pablo@netfilter.org>
To: "Thomas Köller" <thomas@koeller.dyndns.org>
Cc: netfilter@vger.kernel.org
Subject: Re: Adding set elements
Date: Wed, 20 Nov 2024 23:37:06 +0100 [thread overview]
Message-ID: <Zz5kktcay8xI3J0l@calendula> (raw)
In-Reply-To: <0f260665-7d2c-4274-b635-f40519ed193f@koeller.dyndns.org>
On Sat, Nov 16, 2024 at 12:17:27PM +0100, Thomas Köller wrote:
>
>
> Am 15.11.24 um 13:01 schrieb Pablo Neira Ayuso:
> > Hi,
> >
> > On Thu, Nov 14, 2024 at 02:53:04PM +0100, Thomas Köller wrote:
> > > What exactly happens if an attempt is made to add another element to a set
> > > that is already full? I ran into this condition and found that a subsequent
> > > 'nft list ruleset' would display the set with no contained elements at all.
> >
> > I don't see this here.
> >
> > Would you post a reproducer for a current kernel in -stable?
> >
> > > I think that a reasonable way to handle this case would be to apply sume LRU
> > > strategy to free up a slot, but that is apparently not the case?
> >
> > Could you develop your usecase?
> >
>
> I wanted to create a blacklist that the ipv4 source addresses of packets
> that matched certain criteria were added to, like so:
>
> add set ip tbl_ipv4 blacklist { type ipv4_addr; flags dynamic,timeout;
> timeout 1h; gc-interval 6h; size 256; }
Any reason why you picked such a large gc-interval?
> and later:
>
> add rule ip tbl_ipv4 syn add @blacklist { ip saddr timeout 1h } counter drop
>
> I noticed that set elements were accumulating over time as expected, but
> after some time the set showed up as empty in the output of 'nft list
> ruleset'. However, I cannot state with certainty that it was the overflow
> condition that caused this to happen, that was just a guess.
What you observe is an empty listing because all elements have expired
but garbage collector did not remove them yet, so the elements are
still there taking a memory slot in the set until gc runs, ie. set is
full with expired elements, therefore, no more elements can be added.
> I since reduced the element timeout to 10m and the gc-interval to 30m, and
> haven't encountered the problem for a while now.
>
> Assuming that the storage allocated to deleted elements is reused if new
> elements are added before the set is garbage-collected, I would reason that
> the choice of gc interval is not critical and it probably makes sense to
> choose a rather large value in relation to element timeout, is this correct?
There is on-demand garbage collection in the rbtree (which stores
intervals) from (add element) control plane path, but not for the hash
type. From packet path, some sort of on-demand garbage collection
needs to be put in place to support your "storage allocated deleted
elements is reused" assumption.
next prev parent reply other threads:[~2024-11-20 22:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 13:53 Adding set elements Thomas Köller
2024-11-15 12:01 ` Pablo Neira Ayuso
2024-11-16 11:17 ` Thomas Köller
2024-11-20 22:37 ` Pablo Neira Ayuso [this message]
2024-11-21 0:05 ` Thomas Köller
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=Zz5kktcay8xI3J0l@calendula \
--to=pablo@netfilter.org \
--cc=netfilter@vger.kernel.org \
--cc=thomas@koeller.dyndns.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.