From: Pablo Neira Ayuso <pablo@netfilter.org>
To: netfilter-devel@vger.kernel.org
Cc: davem@davemloft.net, netdev@vger.kernel.org, kaber@trash.net,
jhs@mojatatu.com
Subject: [PATCH 0/4] Netfilter ingress support (v3)
Date: Mon, 4 May 2015 12:50:45 +0200 [thread overview]
Message-ID: <1430736649-3546-1-git-send-email-pablo@netfilter.org> (raw)
Hi,
Another round of the patchset to add Netfilter ingress support. This new
patchset introduces the necessary updates in 2 steps:
1) Add minismalistic ingress hook infrastructure that allows to register one
client at a time, so you hit -EBUSY in case the hook is in use. Basically,
we have a function pointer that is rcu-protected to invoke the corresponding
filter framework which has minimal performance impact in the critical ingress
path and avoid more pollution in it. This patch also ports the ingress qdisc
on top of this.
This also results in most of the qdisc ingress code that used to be embedded
into net/core/dev.c can now be placed in net/sched/sch_ingress.c, which
should allow to get rid of the Qdisc->enqueue() call.
2) Add Netfilter ingress support using the minimalistic hook infrastructure.
There is some extra memory consumption (24 bytes) in net_device but pahole
reports here a hole due to ____cacheline_aligned_in_smp to get the transmit
path area in a different cache line. So I'm not sure it's worth the effort
to reduce this to 8 bytes at the cost of getting the hook code a bit more
complicated.
As already said, this opens the window to existing nftables core features that
are not present in qdisc ingress and that can be used out-of-the-box, most
relevantly:
1) Multi-dimensional key dictionary lookups.
2) Arbitrary stateful flow tables.
3) Transactions.
Among others. You can find more on previous RFCs, see:
http://www.spinics.net/lists/netdev/msg325210.html
http://marc.info/?l=netfilter-devel&m=143033337020328&w=2
In summary, this provides the facility to keep both tc and netfilter in place,
while the user can select what they prefer to filter from ingress.
Thanks.
Pablo Neira Ayuso (4):
net: add minimalistic ingress filter hook and port sch_ingress on top of it
netfilter: cleanup struct nf_hook_ops indentation
netfilter: add hook list to nf_hook_state
net: add netfilter ingress hook
include/linux/netdevice.h | 16 ++++++++
include/linux/netfilter.h | 22 +++++-----
include/linux/netfilter_ingress.h | 26 ++++++++++++
include/uapi/linux/netfilter.h | 6 +++
net/Kconfig | 9 +++++
net/core/dev.c | 81 ++++++++++++++++++-------------------
net/netfilter/Makefile | 1 +
net/netfilter/core.c | 29 ++++++++++---
net/netfilter/ingress.c | 41 +++++++++++++++++++
net/sched/Kconfig | 1 +
net/sched/sch_ingress.c | 38 +++++++++++++++--
11 files changed, 211 insertions(+), 59 deletions(-)
create mode 100644 include/linux/netfilter_ingress.h
create mode 100644 net/netfilter/ingress.c
--
1.7.10.4
next reply other threads:[~2015-05-04 10:46 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-04 10:50 Pablo Neira Ayuso [this message]
2015-05-04 10:50 ` [PATCH 1/4] net: add minimalistic ingress filter hook and port sch_ingress on top of it Pablo Neira Ayuso
2015-05-04 10:50 ` [PATCH 2/4] netfilter: cleanup struct nf_hook_ops indentation Pablo Neira Ayuso
2015-05-04 10:50 ` [PATCH 3/4] netfilter: add hook list to nf_hook_state Pablo Neira Ayuso
2015-05-04 10:50 ` [PATCH 4/4] net: add netfilter ingress hook Pablo Neira Ayuso
2015-05-04 15:56 ` [PATCH 0/4] Netfilter ingress support (v3) Alexei Starovoitov
2015-05-04 16:19 ` Florian Westphal
2015-05-04 17:21 ` Jamal Hadi Salim
2015-05-04 17:43 ` Florian Westphal
2015-05-04 18:47 ` Jamal Hadi Salim
2015-05-04 18:59 ` Florian Westphal
2015-05-04 20:05 ` Alexei Starovoitov
2015-05-04 22:21 ` Pablo Neira Ayuso
2015-05-04 23:04 ` Thomas Graf
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=1430736649-3546-1-git-send-email-pablo@netfilter.org \
--to=pablo@netfilter.org \
--cc=davem@davemloft.net \
--cc=jhs@mojatatu.com \
--cc=kaber@trash.net \
--cc=netdev@vger.kernel.org \
--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).