[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CALHBjYFn_qB=Oo3TTg0znOnNz9rX5jP+eYSZbatAN94ys8Tzmw@mail.gmail.com>
Date: Thu, 11 Jul 2024 13:40:02 +0800
From: Changliang Wu <changliang.wu@...rtx.com>
To: pablo@...filter.org, kadlec@...filter.org, davem@...emloft.net,
edumazet@...gle.com, kuba@...nel.org, pabeni@...hat.com
Cc: netfilter-devel@...r.kernel.org, coreteam@...filter.org,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] netfilter: ctnetlink: support CTA_FILTER for flush
PING
Changliang Wu <changliang.wu@...rtx.com> 于2024年6月20日周四 19:35写道:
>
> From cb8aa9a, we can use kernel side filtering for dump, but
> this capability is not available for flush.
>
> This Patch allows advanced filter with CTA_FILTER for flush
>
> Performace
> 1048576 ct flows in total, delete 50,000 flows by origin src ip
> 3.06s -> dump all, compare and delete
> 584ms -> directly flush with filter
>
> Signed-off-by: Changliang Wu <changliang.wu@...rtx.com>
> ---
> net/netfilter/nf_conntrack_netlink.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
> index 3b846cbdc..93afe57d9 100644
> --- a/net/netfilter/nf_conntrack_netlink.c
> +++ b/net/netfilter/nf_conntrack_netlink.c
> @@ -1579,9 +1579,6 @@ static int ctnetlink_flush_conntrack(struct net *net,
> };
>
> if (ctnetlink_needs_filter(family, cda)) {
> - if (cda[CTA_FILTER])
> - return -EOPNOTSUPP;
> -
> filter = ctnetlink_alloc_filter(cda, family);
> if (IS_ERR(filter))
> return PTR_ERR(filter);
> @@ -1610,14 +1607,14 @@ static int ctnetlink_del_conntrack(struct sk_buff *skb,
> if (err < 0)
> return err;
>
> - if (cda[CTA_TUPLE_ORIG])
> + if (cda[CTA_TUPLE_ORIG] && !cda[CTA_FILTER])
> err = ctnetlink_parse_tuple(cda, &tuple, CTA_TUPLE_ORIG,
> family, &zone);
> - else if (cda[CTA_TUPLE_REPLY])
> + else if (cda[CTA_TUPLE_REPLY] && !cda[CTA_FILTER])
> err = ctnetlink_parse_tuple(cda, &tuple, CTA_TUPLE_REPLY,
> family, &zone);
> else {
> - u_int8_t u3 = info->nfmsg->version ? family : AF_UNSPEC;
> + u8 u3 = info->nfmsg->version || cda[CTA_FILTER] ? family : AF_UNSPEC;
>
> return ctnetlink_flush_conntrack(info->net, cda,
> NETLINK_CB(skb).portid,
> --
> 2.43.0
>
Powered by blists - more mailing lists